leetcode98. Validate Binary Search Tree

2017-07-20
阅读 2 分钟
1.3k
如果了解中序遍历的同学可以知道,一颗二叉查找树的中序遍历结果应当是一个数值有小到大递增的数组。正因为中序遍历是指先遍历左子树,接着遍历中间节点,再遍历右子树,恰好和查找树的值递增顺序相同。因此在这里我们采用栈的方式实现中序遍历,通过研究中序遍历是否递增来判断二叉查找树是否符合规则。代码如下:

hibernate中因双向依赖而造成的json怪相--springmvc项目

2017-07-19
阅读 9 分钟
6.7k
如果想要详细了解一下Jackson,可以去其github上的项目主页查看其版本情况以及各项功能。除此以外,需要格外提一下Jackson的版本问题。Jackson目前主流版本有两种,1.x和2.x,而这二者的核心包是不同的。在2.0以后的Jackson版本中,groupId从原来的org.codehaus.jackson.core转而变成了com.fasterxml.jackson.core。所以...

leetcode 94. Binary Tree Inorder Traversal

2017-07-18
阅读 2 分钟
2.2k
这里需要利用栈的数据结构。如果当前节点存在左子节点,则继续遍历左子树直到最后一个左子节点。然后依次处理栈中的元素。如果栈顶元素有右子节点,则将其右子节点压入栈中作为root,再继续遍历root的左子节点。当root和stack都为空时,遍历结束。

leetcode93. Restore IP Addresses

2017-07-18
阅读 2 分钟
1.7k
IP地址由0/1位二进制数字构成,一共分为4个区间,每个区间8位。因此每个区间的值转化到十进制为0~255。那么我们只要划分出这四个区间,然后判断这四个区间的值是否符合标准即可。

leetcode84. Largest Rectangle in Histogram

2017-07-18
阅读 4 分钟
2.2k
这里我首先想到的是leetcode 42 Trapping Rain Water,可以参考我的这篇博客。因为在42题中,如果我找到了当前矩形左右的最近最高矩形即可。而在本题中,同样是需要找到该矩形左右的最高矩形,但不同的是,一旦我在左右搜寻的过程中遇到了一个比当前矩形矮的矩形,遍历即结束。所以两道题目的要求还是存在区别的。

leetcode113. Path Sum II

2017-07-16
阅读 2 分钟
2.1k
题目要求 {代码...} 从树中找到所有符合条件的从根节点到叶节点路径,条件即为树上所有节点值的和等于目标值。Path Sum I可以参考这篇博客 思路和代码 其实这里本质上的思路并没有改变,还是采用深度优先算法,采用自顶向下递归的方式将符合条件的结果放入结果集中。 {代码...} 想要了解更多开发技术,面试教程以及互联...

leetcode92. Reverse Linked List II

2017-07-16
阅读 2 分钟
1.5k
直观点想,我们只需要知道开始翻转的第一个节点和需要翻转的最后一个节点。将从第一个该节点开始依次插入最后一个节点后面直到遇到最后一个节点。该算法的时间复杂度为O(2n-m),即O(n+n-m)

leetcode 41. First Missing Positive

2017-07-14
阅读 2 分钟
2.2k
要实现这种空间复杂度,一般需要有限数量的临时变量来记录遍历的有效范围,再利用原有题目中的数据结构来存储其余的临时变量。这些临时变量可以是排除出的量,也可以是有效量。在这里我用leftPointer记录有效数字的开始下标(即将无效数字转移到leftPointer左侧),利用maxPositive记录数组最大有效整数(换句话说,如果...

leetcode45. Jump Game II

2017-07-13
阅读 3 分钟
1.6k
通过递归的方式找到一条到达终点的路径。通过和当前最短路径比较来省去一些不必要的遍历。但是存在缺点。其实同一个节点到达最终节点的最短步数是一定的,而每一次递归都造成无法省略的重复遍历。

leetcode90. Subsets II

2017-07-12
阅读 3 分钟
2.5k
我们可以通过例子[1,2,2,3]来说明。当我们遇到重复值时,我们可以使用一个临时数组将所有重复值的结果临时保存起来,在这道题目中就是[[2],[2,2]],然后再将当前res中的结果和它一一组合成新的结果值,本例子中的当前res为[[ ],[1]],这样合成之后就是[[],[2],[2,2],[1,2],[1,2,2]],从而避免产生重复的结果。代码如下:

leetcode73. Set Matrix Zeroes

2017-07-12
阅读 3 分钟
1.4k
这里题目中给出了三种空间复杂度。第一种是O(mn),也就是新建一个boolean[m][n]的二维数组,如果该行列上值为0,则将其对应位置上的值也设置为0.最后再遍历boolean[][],将true所在的行列设置为0。但是这种方法不仅boolean[][]中很多值用不到,还会导致重复的0赋值行为,效率很低。这里给出O(m+n)空间复杂度的方法。新...

leetcode37 Sudoku Solver

2017-07-11
阅读 6 分钟
1.9k
不使用数据结构意味着我们自己在每一次遇到一个空格时,需要在board中对该空格所在的行,列以及方块进行遍历,判断填入什么数字是合适的。并将当前的假象结果带入下一轮的遍历之中。如果最终遍历失败,则逐级返回,恢复上一轮遍历的状态,并填入下一个合理的假想值后继续遍历。这里涉及的时间复杂度是很高的,毕竟只是遍...

leetcode86. Partition List

2017-07-09
阅读 3 分钟
1.5k
该思路需要我们记录3个节点。当前节点的前一个节点currentPrev,插入位置的前一个节点prev,以及记录初始位置的节点start。当发现一个需要交换的节点时,先获得这个节点,然后将currentPrev指向节点的后一个节点。之后将当前的节点插入到prev之后。代码如下:

leetcode78. Subsets

2017-07-08
阅读 2 分钟
3.2k
类似的题目有:leetcode60 Permutation Sequence 可以参考这篇博客leetcode77 Combinations 可以参考这篇博客

leetcode80. Remove Duplicates from Sorted Array II

2017-07-05
阅读 2 分钟
1.7k
其实在这里我们仍然延续I中的思路。在遇到非重复值以及非多余的重复值时,将数值移动到当前记录的下标上。保证该下标前的值均为满足题目条件的值。第一次我使用了count来记录某个值出现的次数。

leetcode77. Combinations

2017-07-05
阅读 2 分钟
2k
题目要求 {代码...} 有整数从1到n,问从中任选两个数有多少排列组合的结果(顺序无关) 思路一:利用链表(超时问题) 这题其实是动态编码的一个题目,可以通过链表实现队列存储前一种情况。再在前一种情况下继续下一轮的遍历,并将结果添加到队列末尾。代码如下: {代码...} 但是在这里存在超时问题,归根结底在于每一...

leetcode74. Search a 2D Matrix

2017-07-04
阅读 3 分钟
1.4k
假设存在这样一个二维数组,该数组从左到右,从上到下均递增,且下一行第一个值比上一行最后一个值大。要求从里面找到一个目标值,存在则返回true,否则返回false

leetcode75. Sort Colors

2017-07-04
阅读 2 分钟
1.6k
如何能在一次遍历的过程中实现三个数字的排序呢~这就需要使用到双指针。我们要确保左指针之前的数值全部是0,右指针之后的数值全部是2。这样他就可以确保左右指针之间的数字为1,从而实现0,1,2的排序。代码如下:

leetcode65 valid number 正则表达式的运用

2017-07-02
阅读 4 分钟
4.4k
写一个算法 判断输入的字符串是否是数字。这道题的需求给的较为模糊,对于什么是数字并没有给出明确的定义。这里我要给出几个特殊的情况来说明数字究竟是什么。

leetcode71. Simplify Path

2017-07-02
阅读 2 分钟
2.8k
标题文字 {代码...} 简化unix风格的绝对路径。这里简单说一下unix风格的路径: .表示当前文件夹,即不进行任何操作 ..表示返回上层文件夹,如果已经至根目录,则不进行任何操作 /表示路径的分割线,多个连续的/等价于/ 这里我们需要将复杂的unix路径,例如/a/./b/../../c/简化成最简形式/c 思路和代码 从直观的角度思考...

正则表达式 深入浅出1--你的符号我做主【持续更新中

2017-07-02
阅读 2 分钟
11.5k
在leetcode中刷到了一题是关于正则表达式的。然而网上给出的关于正则表达式的信息往往都是现成的,直接照搬还是可以的,但是并不能掌握到精髓。所以,我用这篇文章来由浅入深的介绍一下我学习正则表达式的过程。该博客将随着学习进度不断更新,希望各位能够指出博主在学习中的误区。

leetcode60. Permutation Sequence

2017-07-01
阅读 2 分钟
2.6k
首先来整理一下思路。如果有n个数组,则能排列组合出n!个结果。然后再按照排列组合结果的各个位上的数字选择来分析。这里举一个具体的例子。就看题中给的例子,此时n=3。假设k=5。则在百位上,选择的数字为[1,2,3]中的第三个,这是再看十位上的数字,选择了[1,2]中的第一个数。最后在个位上,选择[1]中的第一个。可以...

leetcode82. Remove Duplicates from Sorted List II

2017-06-29
阅读 2 分钟
2.1k
相比于Remove Duplicates from Sorted List I,这里将重复的元素全部删除。想要了解Remove Duplicates from Sorted List I,请参考我的这篇博客

leetcode64 Minimum Path Sum

2017-06-29
阅读 1 分钟
1.6k
同样,最左侧和最上侧的节点都只有一条路径可以到达,所以它们的路径唯一。其它的节点则可以通过左侧或上侧的节点到达。只需要判断左或上哪条路径更短即可。代码如下:

leetcode63. Unique Paths II

2017-06-28
阅读 2 分钟
2.3k
这是Unique Path题目系列。关于Unique Path I请参考我的这篇博客。相比于I,这里添加的需求是说,某些节点上存在路障。存在路障的节点会在数组中被标记为1。请问从起点到终点有多少条独立路径。

leetcode 81 Search in Rotated Sorted Array II

2017-06-26
阅读 3 分钟
2k
在上一道题目的基础上,我们知道,如果数组中存在重复值,可能会出现类似于[1,3,1,1]这种情况出现。如果在这时候使用二分法,很可能会无法判断出到底属于左半侧数组还是右半侧数组。这是我们可以将情况分为以下几种。

leetcode43 multiply strings

2017-06-25
阅读 5 分钟
1.7k
根据乘法计算的规则,我们可以判断两个值计算后应该填到哪一个位置上。假设num1[i]*num2[j],则将结果的十位和个位分别放在数组下标为i+j和i+j+1的位置上。记得计算的时候要加上上一轮的进位。

leetcode62. Unique Paths

2017-06-22
阅读 3 分钟
4k
通过递归实现计算。根据题目可知,在任何一个方块,一共有两条路径,一条是往下走,一条是往右走,如果任何一条路径能够到达终点,则返回1,否则返回0。

leetcode57. Insert Interval

2017-06-19
阅读 2 分钟
1.6k
给定一组顺序排列且相互之间没有重叠的区间,输入一个区间,将它插入到当前的区间数组中,并且将需要合并的区间合并,之后返回插入并且合并后的区间。

leetcode59 Spiral Matrix II

2017-06-19
阅读 2 分钟
2k
题目要求 {代码...} 也就是将递加的数字按照顺时针的顺序依次填入数组之中 这道题目联系到Spiral Matrix I,其实就相当好解决了。Spiral Matrix I可以参考我的这篇博客 具体代码 在参考完这篇博客后,就会发现,这里其实就是将读取数据反过来改为填入数据,代码如下: {代码...} 想要了解更多开发技术,面试教程以及互联...