自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(116)
  • 收藏
  • 关注

原创 33. 二叉搜索树的后序遍历序列

输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。参考以下这颗二叉搜索树: 5/ \2 6/ 1 3示例 1:输入: [1,6,3,2,5]输出: false示例 2:输入: [1,3,2,6,5]输出: trueclass Solution { public boolean verifyPostorder(int[] postorder) { if(

2021-05-16 14:45:55 147 1

原创 32 - III. 从上到下打印二叉树 III

请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:给定二叉树: [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层次遍历结果:[[3],[20,9],[15,7]]class Solution { public List<List<Integer>> levelOrder(TreeNode root)

2021-05-16 13:17:10 141

原创 32 - II. 从上到下打印二叉树 II

从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:给定二叉树: [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回其层次遍历结果:[[3],[9,20],[15,7]]class Solution { public List<List<Integer>> levelOrder(TreeNode root) { Queue<TreeNode> queu

2021-05-16 12:55:46 145

原创 剑指 Offer 32 - I. 从上到下打印二叉树

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。例如:给定二叉树: [3,9,20,null,null,15,7],3/ 9 20/ 15 7返回:[3,9,20,15,7]class Solution { public int[] levelOrder(TreeNode root) { if(root==null){ return new int[0]; } Queue<

2021-05-16 12:42:17 71

转载 剑指 Offer 31. 栈的压入、弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), push(2), push(3), push(4)

2021-05-16 12:19:33 52

原创 剑指 Offer 30. 包含min函数的栈

定义栈的数据结构,请在该类型中实现一个能够得到栈的最小元素的 min 函数在该栈中,调用 min、push 及 pop 的时间复杂度都是 O(1)。示例:MinStack minStack = new MinStack();minStack.push(-2);minStack.push(0);minStack.push(-3);minStack.min(); --> 返回 -3.minStack.pop();minStack.top(); --> 返回 0.min

2021-05-16 11:42:46 61

原创 剑指 Offer 29. 顺时针打印矩阵

输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。示例 1:输入:matrix = [[1,2,3],[4,5,6],[7,8,9]]输出:[1,2,3,6,9,8,7,4,5]示例 2:输入:matrix = [[1,2,3,4],[5,6,7,8],[9,10,11,12]]输出:[1,2,3,4,8,12,11,10,9,5,6,7]class Solution { public int[] spiralOrder(int[][] matrix) { if(

2021-05-08 22:38:04 55

原创 剑指 Offer 28. 对称的二叉树

请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。例如,二叉树 [1,2,2,3,4,4,3] 是对称的。1/ 2 2/ \ / 3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的:1/ 2 2\ 3 3示例 1:输入:root = [1,2,2,3,4,4,3]输出:true示例 2:输入:root = [1,2,2,null,3,null,3]输出:false

2021-05-08 20:58:47 59

原创 剑指 Offer 27. 二叉树的镜像

请完成一个函数,输入一个二叉树,该函数输出它的镜像。例如输入: 4/ 2 7/ \ / 1 3 6 9镜像输出: 4/ 7 2/ \ / 9 6 3 1示例 1:输入:root = [4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]class Solution { public TreeNode mirrorTree(TreeNode root) { swapTree(root);

2021-05-08 20:41:15 50

原创 剑指 Offer 26. 树的子结构

输入两棵二叉树A和B,判断B是不是A的子结构。(约定空树不是任意一个树的子结构)B是A的子结构, 即 A中有出现和B相同的结构和节点值。例如:给定的树 A: 3/ \4 5/ 1 2给定的树 B:4/1返回 true,因为 B 与 A 的一个子树拥有相同的结构和节点值。示例 1:输入:A = [1,2,3], B = [3,1]输出:false示例 2:输入:A = [3,4,5,1,2], B = [4,1]输出:trueclass Solution {

2021-05-08 20:34:40 47

原创 剑指 Offer 25. 合并两个排序的链表

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。示例1:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4class Solution { public ListNode mergeTwoLists(ListNode l1, ListNode l2) { ListNode dummyNode=new ListNode(0); ListNode cur=du

2021-05-08 18:58:39 63

原创 剑指 Offer 24. 反转链表

定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点。示例:输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL限制:0 <= 节点个数 <= 5000class Solution { public ListNode reverseList(ListNode head) { if(head==null){ return

2021-05-08 18:49:46 45

原创 剑指 Offer 22. 链表中倒数第k个节点

输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1、2、3、4、5、6。这个链表的倒数第 3 个节点是值为 4 的节点。示例:给定一个链表: 1->2->3->4->5, 和 k = 2.返回链表 4->5.class Solution { public ListNode getKthFromEnd(ListNode head, in

2021-05-08 17:21:19 55

原创 剑指 Offer 21. 调整数组顺序使奇数位于偶数前面

输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。class Solution { public int[] exchange(int[] nums) { int left=0; int right=nums.length-1; while(left<right){ while(left<nums.length-1&&nums[lef

2021-05-08 17:07:41 52

原创 剑指 Offer 18. 删除链表的节点

给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。返回删除后的链表的头节点。注意:此题对比原题有改动示例 1:输入: head = [4,5,1,9], val = 5输出: [4,1,9]解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为 4 -> 1 -> 9.示例 2:输入: head = [4,5,1,9], val = 1输出: [4,5,9]解释: 给定你链表中值为 1 的第三个节点,那么在调用了你的函数之后,该链

2021-05-08 16:49:15 50

原创 剑指 Offer 11. 旋转数组的最小数字

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1示例 2:输入:[2,2,2,0,1]输出:0class Solution { public int minArray(int[] numbers) { int start=0; int e

2021-05-08 16:33:34 63

原创 指 Offer 10- II. 青蛙跳台阶问题

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入:n = 2输出:2示例 2:输入:n = 7输出:21示例 3:输入:n = 0输出:1提示:0 <= n <= 100class Solution { public int numWays(int n) { int a = 1, b

2021-05-05 23:08:56 56

原创 剑指 Offer 10- I. 斐波那契数列

写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。class Solution { public int fib(int n) {

2021-05-05 23:05:13 55

原创 剑指 Offer 09. 用两个栈实现队列

class CQueue {Stack<Integer> inputStack;Stack<Integer> outStack; public CQueue() { inputStack=new Stack(); outStack=new Stack(); } public void appendTail(int value) { inputStack.push(value); }

2021-05-05 22:56:02 64

原创 7 重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:3/ 9 20/ 15 7限制:0 <= 节点个数 <= 5000class Solution { public TreeNode buildTree(int[] preorder, int[] inord

2021-05-05 22:42:28 50

原创 6 从尾到头打印链表

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]class Solution { public int[] reversePrint(ListNode head) { if(head==null){ return new int[0]; } Stack<ListNode> stack=new Stack<ListNode

2021-05-05 18:43:44 57

原创 剑指Offer-5.替换空格

题目请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:“We%20are%20happy.”代码 class Solution { public String replaceSpace(String s) { int length = s.length(); int k=0; for(int i=0;i<length;i++){ char

2021-05-05 18:17:00 51

原创 剑指Offer-4.二维数组的查找

题目在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]给定 target = 5,返回 true。给定

2021-05-05 17:52:14 47

原创 算法学习-二叉树遍历

二叉树非递归遍历主要有前序、中序、后续遍历三种方式,我使用相同的模板实现这三种遍历方式,后续如有面试,必先过一遍。整体逻辑需要注意:1.栈中推入左右子树时,应先推右子树,再推左子树,达到顺序遍历的效果2.遍历到需要弹出的节点,先push一个null作为输出标记,应在节点之后推入前序遍历如下 public List<Integer> preorderTraversal(TreeNode root) { List<Integer> list=new Array

2021-04-25 22:49:14 66

原创 算法学习-二分查找详解

最近碰到二分查找题目被暴虐,故总结一下类似题目的规律,下次若忘记及时回来查缺补漏。我认为二分查找问题可分为三种类型:简单二分查找(目标值查找)左边界二分查找(查找目标值左边界、查找最后一个小于目标值的数)右边界二分查找(查找目标值右边界、查找第一个大于目标值的数)我使用的二分查找模板为: public static int binarySearch(int []arr,int target) { int l=0,r=arr.length-1; while

2021-04-18 20:49:28 83

原创 Elasticsearch学习-集群选主问题

Elasticsearch选择主从的模式作为其分布式架构的设计方案,该模式在节点数并不多、相对稳定的网络、并不需要经常处理节点的加入或离开的应用场景下是合理的选择。选举算法在选举算法中以 Bully算法为主,该选举算法假设集群节点都有一个唯一ID,根据 集群状态+唯一ID做二次排序获取到Master节点。当集群不稳定时,如Master负载过重而假死,集群第二位节点当选Master,这时老的Master恢复了,再次被选为新主,再次假死。ES通过推迟选举的方式,即当从节点发现Master假死,通过检测的方式

2021-02-22 23:14:03 645

原创 SpringBoot+Mybatis 写SQL

强烈推荐https://www.jianshu.com/p/8bc02304618b

2018-12-25 20:03:57 621

原创 leetcode 206 链表反转

链表反转的代码实现方式有很多种,有使用头插法、使用多指针这两种方式通常为最优 我先介绍使用多指针的方式,下面我将用图解的方式展示如何进行链表反转:图解1.原数据2.cur.next=pro3.移动指针 pro=cur cur=Next ListNode Next=cur.next 4.以此类推代码: public ListNode...

2018-08-26 19:29:53 462

原创 设计模式之观察者模式

观察者模式用十分简单的方式来解答就是 一个人表演一堆人看他的操作,对于这个需求,我们需要四个角色:抽象被观察者(抽象表演者)、抽象观察者(抽象观众)、具体被观察者(表演者)、具体观察者(观众)。抽象被观察者: 是一个抽象主题,它把所有对观察者对象的引用保存在一个集合中,每个主题都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。抽象观察者...

2018-08-05 13:35:02 176

原创 HBase 匹配rowkey神器

最近烦恼了好久,怎么才能进行快速的匹配在HBase中我想要的Result,我尝试过很多方式,不知道是公司建表的原因,还是我代码的问题,匹配速度都奇慢。在踩坑的过程中,我了解到 1、通过rowkey查询才是王道。其余的字段查询,都相当于是HBase的全表遍历一般,十分低效。 2、若无法得到完整rowkey,可以考虑获取前面部分rowkey,比如:rowkey:www.baidu.com_md5加...

2018-08-03 15:26:13 5243 2

原创 慕课网日志分析实战三:需求实现代码

本来打算这一系列一直更下去,但是后来由于实习和秋招的问题一直耽搁,本来打算一切结束再继续更新这一系列,感觉评论有点多,CSND小透明受宠若惊。决定继续更新下去。在慕课日志分析这个项目我觉得说简单其实也并不简单,蕴含着很多日志处理的坑。说简单是因为大部分繁重的步骤,包括业务梳理,字段整合之类的,已经在前面帮咱们解决了,不需要学习者做什么,学习者只需要将数据进行简单分词,转化DF或DS写代码或者SQL...

2018-07-29 16:22:57 830 4

原创 设计模式之单例模式

单例模式 应用场景:有些对象只需要一个就足够了 作用:整个应用程序的某个实例有且只有一个 类型:饿汉模式、懒汉模式饿汉模式特点:.加载类比较慢,运行时获取对象速度比较快线程安全public class Singleton{ //1.构造方法私有化,不许外部直接创建对象 private Singleton() { ...

2018-07-28 20:22:59 147 1

原创 Spark Shuffle详解之SortShuffle

在Spark1.2版本之后,出现了SortShuffle,这种方式以更少的中间磁盘文件产生而远远优于HashShuffle。而它的运行机制主要分为两种。一种为普通机制,另一种为bypass机制。而bypass机制的启动条件为,当shuffle read task的数量小于等于spark.shuffle.sort.bypassMergeThreshold参数的值时(默认为200),就会启用bypas...

2018-07-24 23:35:27 8611 1

原创 Spark Shuffle详解之HashShuffle

概述所谓Shuffle就是将不同节点上相同的Key拉取到一个节点的过程。这之中涉及到各种IO,所以执行时间势必会较长,Spark的Shuffle在1.2之前默认的计算引擎是HashShuffleManager,不过HashShuffleManager有一个十分严重的弊端,就是会产生大量的中间文件。在1.2之后默认Shuffle改为SortShuffleManager,相对于之前,在每个Task...

2018-07-23 21:16:10 2040

原创 String,StringBuffer与StringBuilder的区别

转载自:https://blog.csdn.net/rmn190/article/details/1492013String 字符串常量StringBuffer 字符串变量(线程安全)StringBuilder 字符串变量(非线程安全)String简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每...

2018-07-19 14:32:08 123

原创 Java集合学习4——HashMap深入理解

距离接触HashMap有一段时间,我对Java集合类有了更加深入的理解。通过jdk1.8和1.7的对比发现HashMap的优化进步。最大的特点就是HashMap1.7版本最大的问题就是有很低的概率会发生在散列表中一个链表的长度很长,使得其查询退化为O(n)复杂度。在1.8中,当链表长度大于8时,转化为红黑树。众所周知,红黑树是一种平衡二叉树,是不会存在这种问题的。同时,我们也是知道HashMa...

2018-07-17 00:25:39 261

原创 Mongo插入Json数据报错:Can't find a codec for class java.math.BigDecimal.

首先吐槽一下百度啊,百度了好久,还是找不到问题所在。幸好公司有外网,我抱着尝试的态度谷歌了一下,看了老外的博客才解决了这个问题。需求:我希望将Json插入到MongDB。1.方法一:我选择FastJson得到json数据,使用Document类包装,插入到mongdb中。 //将数据转换为json类 JSONObject jsonObject = JSON...

2018-07-11 16:48:29 16756 5

原创 IDEA构建 Spring Boot 入门:HelloWorld

新建项目 1. 2. 3. 项目构建完成,等待maven下载依赖,下载完毕,目录结构如下书写hello world代码代码如下:@RestController@EnableAutoConfigurationpublic class HelloWordController { @RequestMapping("/hello") p...

2018-07-04 19:09:03 183

原创 MongoDB下载安装教程 mac版

首先推荐选择Homebrew安装,听说是mac十分方便的应用管理工具,亲测也的确不错,不过我的mac版本低于10.0,MongoDB3.0以上版本对应mac10.0以下版本不兼容,于是我选择了手动安装,安装版本2.68,也就是我将要写的教程:下载安装包 MongoDB历史版本下载地址解压安装包tar -zxvf mongodb-osx-x86_64-2.6.8.tgz -C /Us...

2018-07-02 17:13:10 2873

原创 问题:IDEA构建scala项目,无法显示文件结构且仅有.idea文件夹

问题:解决办法: 在构建项目时,添加 Name:archetypeCatalog Value:internal

2018-06-29 18:00:10 956

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除