提交 de13f7e7 编写于 作者: L liu13

20190318

上级 9e2990cd
...@@ -19,8 +19,7 @@ public class lc104 { ...@@ -19,8 +19,7 @@ public class lc104 {
TreeNode(int x) { val = x; } TreeNode(int x) { val = x; }
} }
public int maxDepth(TreeNode root) { public int maxDepth(TreeNode root) {
if(root==null) if(root==null) return 0;
return 0;
return Math.max(maxDepth(root.left),maxDepth(root.right)) + 1; return Math.max(maxDepth(root.left),maxDepth(root.right)) + 1;
} }
......
...@@ -8,7 +8,7 @@ import java.util.List; ...@@ -8,7 +8,7 @@ import java.util.List;
* 难度:Medium * 难度:Medium
* 分类:Tree, Depth-first Search * 分类:Tree, Depth-first Search
* 思路:回溯,注意因为节点上可能正值,可能负值,所以不能剪枝 * 思路:回溯,注意因为节点上可能正值,可能负值,所以不能剪枝
* Tips: * Tips:lc124
*/ */
public class lc113 { public class lc113 {
public class TreeNode { public class TreeNode {
......
...@@ -6,6 +6,7 @@ package code; ...@@ -6,6 +6,7 @@ package code;
* 分类:Tree, Depth-first Search * 分类:Tree, Depth-first Search
* 思路:因为二叉树只有两个节点,一条路径可以想象成倒V字,从低层的某个节点一路向上,到达一个顶点,再一路向下,理解了这一点,整道题就好解了。 * 思路:因为二叉树只有两个节点,一条路径可以想象成倒V字,从低层的某个节点一路向上,到达一个顶点,再一路向下,理解了这一点,整道题就好解了。
* Tips:用了一个全局变量存储最后结果,因为函数返回的是直线路径上的最优解,而不是V字路径最优解 * Tips:用了一个全局变量存储最后结果,因为函数返回的是直线路径上的最优解,而不是V字路径最优解
* lc133
*/ */
public class lc124 { public class lc124 {
public class TreeNode { public class TreeNode {
......
...@@ -6,6 +6,7 @@ package code; ...@@ -6,6 +6,7 @@ package code;
* 分类:Breadth-first Search * 分类:Breadth-first Search
* 思路:bfs, 利用双向bfs可以加快搜索https://leetcode.com/problems/word-ladder/discuss/40711/Two-end-BFS-in-Java-31ms. * 思路:bfs, 利用双向bfs可以加快搜索https://leetcode.com/problems/word-ladder/discuss/40711/Two-end-BFS-in-Java-31ms.
* Tips:拓扑排序,很经典的BFS,好好看看 * Tips:拓扑排序,很经典的BFS,好好看看
* lc207
*/ */
import java.util.ArrayDeque; import java.util.ArrayDeque;
import java.util.List; import java.util.List;
......
...@@ -6,6 +6,7 @@ package code; ...@@ -6,6 +6,7 @@ package code;
* 分类:Dynamic Programming * 分类:Dynamic Programming
* 思路:动态规划 * 思路:动态规划
* Tips:巧妙的方法,防止了复杂的操作,通过遍历之前计算出来的结果 * Tips:巧妙的方法,防止了复杂的操作,通过遍历之前计算出来的结果
* lc140
*/ */
import java.util.List; import java.util.List;
......
...@@ -5,6 +5,7 @@ package code; ...@@ -5,6 +5,7 @@ package code;
* 难度:Easy * 难度:Easy
* 分类:Linked List, Two Pointers * 分类:Linked List, Two Pointers
* 思路:快慢指针 * 思路:快慢指针
* lc142
*/ */
public class lc141 { public class lc141 {
public class ListNode { public class ListNode {
......
...@@ -4,7 +4,7 @@ package code; ...@@ -4,7 +4,7 @@ package code;
* 题意:找出数组中任意一个山顶点,时间复杂度O(lg(n)),山顶点指该数左右两边都的数都小于他 * 题意:找出数组中任意一个山顶点,时间复杂度O(lg(n)),山顶点指该数左右两边都的数都小于他
* 难度:Medium * 难度:Medium
* 分类:Array, Binary Search * 分类:Array, Binary Search
* 思路:二分查找,想好左右两边递归判断。只有nums[mid]<nums[mid+1],说名右半边就存在峰值 * 思路:二分查找,想好左右两边递归判断。只要nums[mid]<nums[mid+1],说明右半边就存在峰值
* Tips: * Tips:
*/ */
public class lc162 { public class lc162 {
......
...@@ -4,14 +4,14 @@ package code; ...@@ -4,14 +4,14 @@ package code;
* 题意:数组中有一个元素出现次数 >len/2 ,找出这个数 * 题意:数组中有一个元素出现次数 >len/2 ,找出这个数
* 难度:Easy * 难度:Easy
* 分类:Array, Divide and Conquer, Bit Maniputation * 分类:Array, Divide and Conquer, Bit Maniputation
* 思路:很多种方法, Hashmap 是 O(n), O(n)的。 快排是O(log(n)), O(1)的。最巧妙的办法是 O(n), O(1) 的如下。 * 思路:很多种方法, Hashmap 是 O(n), O(n)的。 快排是O(n), O(1)的。最巧妙的办法是 O(n), O(1) 的如下。
* Tips:之所以能够 O(n), O(1) 是因为题目已经给定了数组中一定能找到这个数,该方法充分利用了这一点 * Tips:之所以能够 O(n), O(1) 是因为题目已经给定了数组中一定能找到这个数,该方法充分利用了这一点
*/ */
public class lc169 { public class lc169 {
public int majorityElement(int[] nums) { public int majorityElement(int[] nums) {
int res = nums[0]; int res = nums[0];
int count = 1; int count = 1;
for (int i = 1; i < nums.length ; i++) { for (int i = 1; i < nums.length ; i++) { // 摩尔投票法,看这个数出现了几次
if(nums[i]!=res) // 不是这个数就 --, ==0就用当前数替换res if(nums[i]!=res) // 不是这个数就 --, ==0就用当前数替换res
count--; count--;
else else
......
...@@ -4,7 +4,7 @@ package code; ...@@ -4,7 +4,7 @@ package code;
* 题意:数组向后移几位,超出末尾的补到前边 * 题意:数组向后移几位,超出末尾的补到前边
* 难度:Easy * 难度:Easy
* 分类:Array * 分类:Array
* 思路:一种状替换,别忘了可能是多个环。 * 思路:一种状替换,别忘了可能是多个环。
* reverse 的方法,先整体反转,再按照k划分成两个数组分别反转 * reverse 的方法,先整体反转,再按照k划分成两个数组分别反转
* Tips: * Tips:
*/ */
......
...@@ -6,6 +6,7 @@ package code; ...@@ -6,6 +6,7 @@ package code;
* 分类:Dynamic Programming * 分类:Dynamic Programming
* 思路:经典的dp题,记一下 * 思路:经典的dp题,记一下
* Tips:时间复杂度为 O(n) * Tips:时间复杂度为 O(n)
* lc213
*/ */
public class lc198 { public class lc198 {
public int rob(int[] nums) { public int rob(int[] nums) {
......
...@@ -9,6 +9,7 @@ import java.util.*; ...@@ -9,6 +9,7 @@ import java.util.*;
* 分类:Depth-first Search, Breadth-first Search, Graph, Topology Sort * 分类:Depth-first Search, Breadth-first Search, Graph, Topology Sort
* 思路:两种方法,一种BFS拓扑排序(每个节点,先求出入度),另一种DFS找是否有环 * 思路:两种方法,一种BFS拓扑排序(每个节点,先求出入度),另一种DFS找是否有环
* Tips:很经典的题,拓扑排序,判断图是否有环的DFS * Tips:很经典的题,拓扑排序,判断图是否有环的DFS
* lc127 lc210
*/ */
public class lc207 { public class lc207 {
public static void main(String[] args) { public static void main(String[] args) {
......
...@@ -29,11 +29,8 @@ public class lc215 { ...@@ -29,11 +29,8 @@ public class lc215 {
nums[right] = nums[left]; nums[right] = nums[left];
} }
nums[left] = cur; nums[left] = cur;
if(left==k-1) if(left==k-1) return cur;
return cur; else if(left>k-1) return quickSort(nums, origin_l, left-1, k);
else if(left>k-1) else return quickSort(nums, left+1, origin_r, k);
return quickSort(nums, origin_l, left-1, k);
else
return quickSort(nums, left+1, origin_r, k);
} }
} }
...@@ -7,7 +7,7 @@ import java.util.Stack; ...@@ -7,7 +7,7 @@ import java.util.Stack;
* 题意:表达式计算 * 题意:表达式计算
* 难度:Medium * 难度:Medium
* 分类:String * 分类:String
* 思路:很巧妙的方法,每次遍历到下一个符号的时候,计算前一个符号的运算,泥面膜了复杂的逻辑。 * 思路:很巧妙的方法,每次遍历到下一个符号的时候,计算前一个符号的运算,避免了复杂的逻辑。
* + - 运算直接入栈,* / 运算则计算后将结果入栈,实现了 * / 优先运算 * + - 运算直接入栈,* / 运算则计算后将结果入栈,实现了 * / 优先运算
* Tips:自己想的方法会非常麻烦。这个解法非常聪明。 * Tips:自己想的方法会非常麻烦。这个解法非常聪明。
*/ */
......
...@@ -4,7 +4,7 @@ package code; ...@@ -4,7 +4,7 @@ package code;
* 题意:判断链表是否是回文的 * 题意:判断链表是否是回文的
* 难度:Easy * 难度:Easy
* 分类:LinkedList, Two Pointers * 分类:LinkedList, Two Pointers
* 思路:反转一就行了,避免了空间开销 * 思路:反转一就行了,避免了空间开销
* Tips:很好的题,考了 Two Pointers, 还考了链表反转 * Tips:很好的题,考了 Two Pointers, 还考了链表反转
*/ */
public class lc234 { public class lc234 {
......
...@@ -11,7 +11,6 @@ import java.util.Stack; ...@@ -11,7 +11,6 @@ import java.util.Stack;
* Tips:和lc42做比较,都可以用栈或者dp来做. 很难,栈的操作很难想到. * Tips:和lc42做比较,都可以用栈或者dp来做. 很难,栈的操作很难想到.
* 和lc42 dp作比较 和lc32栈做比较 * 和lc42 dp作比较 和lc32栈做比较
* lc85 * lc85
*
*/ */
public class lc84 { public class lc84 {
public static void main(String[] args) { public static void main(String[] args) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册