Skip to content

Commit 05bc7e9

Browse files
committed
20190104
1 parent 5ee25a9 commit 05bc7e9

File tree

6 files changed

+234
-51
lines changed

6 files changed

+234
-51
lines changed

code/lc124.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,30 @@
11
package code;
2-
2+
/*
3+
* 124. Binary Tree Maximum Path Sum
4+
* 题意:二叉树中找和最大的路径
5+
* 难度:Hard
6+
* 分类:Tree, Depth-first Search
7+
* 思路:因为二叉树只有两个节点,一条路径可以想象成倒V字,从低层的某个节点一路向上,到达一个顶点,再一路向下,理解了这一点,整道题就好解了。
8+
* Tips:用了一个全局变量存储最后结果,因为函数返回的是直线路径上的最优解,而不是V字路径最优解
9+
*/
310
public class lc124 {
11+
public class TreeNode {
12+
int val;
13+
TreeNode left;
14+
TreeNode right;
15+
TreeNode(int x) { val = x; }
16+
}
17+
int res = Integer.MIN_VALUE; //可能小于0
18+
public int maxPathSum(TreeNode root) {
19+
dfs(root);
20+
return res;
21+
}
22+
public int dfs(TreeNode root){
23+
if(root==null)
24+
return 0;
25+
int left = Math.max(dfs(root.left),0);
26+
int right = Math.max(dfs(root.right),0);
27+
res = Math.max(res, left+right+root.val); //该节点是路径上的最高层节点
28+
return Math.max(left,right)+root.val;
29+
}
430
}

code/lc128.java

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,41 @@
11
package code;
22

3+
import java.util.HashSet;
4+
import java.util.Set;
5+
6+
/*
7+
* 128. Longest Consecutive Sequence
8+
* 题意:无序数组,求最长连续子序列的长度
9+
* 难度:Hard
10+
* 分类:Array, Union Find
11+
* 思路:用set先把所有元素放一遍,再遍历,每次找边界,remove掉
12+
* Tips:也可以只用一个循环,每次放进去以后,更新边界的值即可
13+
*/
314
public class lc128 {
15+
public static void main(String[] args) {
16+
int[] nums = {100, 4, 200, 1, 3, 2};
17+
System.out.println(longestConsecutive(nums));
18+
}
19+
public static int longestConsecutive(int[] nums) {
20+
Set<Integer> s = new HashSet();
21+
for(int i:nums) s.add(i);
22+
int max_len = 0;
23+
for(int i:nums) {
24+
if(s.contains(i)){
25+
s.remove((Integer)i);
26+
int left = i-1;
27+
while(s.contains(left)){
28+
s.remove((Integer)left);
29+
left--;
30+
}
31+
int right = i+1;
32+
while(s.contains(right)){
33+
s.remove((Integer)right);
34+
right++;
35+
}
36+
max_len = Math.max(right-left-1, max_len);
37+
}
38+
}
39+
return max_len;
40+
}
441
}

code/lc141.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package code;
22
/*
33
* 141. Linked List Cycle
4-
* 题意:链表是否有换
4+
* 题意:链表是否有环
55
* 难度:Easy
66
* 分类:Linked List, Two Pointers
77
* 思路:快慢指针

code/lc142.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package code;
2+
/*
3+
* 142. Linked List Cycle II
4+
* 题意:求链表环的起始节点
5+
* 难度:Medium
6+
* 分类:Linked List, Two Pointers
7+
* 思路:lc141进一步问题。快慢指针相遇后走了a+b步,head 走a步后到起始点,则 a+b+n=2a+2b -> a+b=n 所以相遇点再走a步到起始点。相遇以后再设一个指针从head开始走,满指针接着走,则相遇点为环的入口点。
8+
* Tips:
9+
*/
10+
public class lc142 {
11+
public class ListNode {
12+
int val;
13+
ListNode next;
14+
ListNode(int x) { val = x; }
15+
}
16+
public ListNode detectCycle(ListNode head) {
17+
if(head==null)
18+
return null;
19+
ListNode slow = head;
20+
ListNode fast = head;
21+
ListNode slow2 = head;
22+
while( fast.next!=null && fast.next.next!=null ){
23+
slow = slow.next;
24+
fast = fast.next.next;
25+
if(slow==fast){
26+
while(slow2!=slow){
27+
slow = slow.next;
28+
slow2 = slow2.next;
29+
}
30+
return slow2;
31+
}
32+
}
33+
return null;
34+
}
35+
}

code/lc146.java

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
package code;
2+
/*
3+
* 146. LRU Cache
4+
* 题意:首先理解LRU思想,最久未被访问过的,最先被替换
5+
* 难度:Hard
6+
* 分类:Design
7+
* 思路:hashmap + 双向链表。hashmap实现了O(1)的get,双向链表实现O(1)的put
8+
* Tips:能想到双向链表,就不难了
9+
*/
10+
import java.util.HashMap;
11+
12+
public class lc146 {
13+
class Node {
14+
int key;
15+
int value;
16+
Node pre;
17+
Node next;
18+
19+
public Node(int key, int value) {
20+
this.key = key;
21+
this.value = value;
22+
}
23+
}
24+
public class LRUCache {
25+
26+
HashMap<Integer, Node> map;
27+
int capicity, count;
28+
Node head, tail;
29+
30+
public LRUCache(int capacity) {
31+
this.capicity = capacity;
32+
map = new HashMap<>();
33+
head = new Node(0, 0);
34+
tail = new Node(0, 0);
35+
head.next = tail;
36+
tail.pre = head;
37+
head.pre = null;
38+
tail.next = null;
39+
count = 0;
40+
}
41+
42+
public void deleteNode(Node node) {
43+
node.pre.next = node.next;
44+
node.next.pre = node.pre;
45+
}
46+
47+
public void addToHead(Node node) {
48+
node.next = head.next;
49+
node.next.pre = node;
50+
node.pre = head;
51+
head.next = node;
52+
}
53+
54+
public int get(int key) {
55+
if (map.get(key) != null) {
56+
Node node = map.get(key);
57+
int result = node.value;
58+
deleteNode(node);
59+
addToHead(node);
60+
return result;
61+
}
62+
return -1;
63+
}
64+
65+
public void put(int key, int value) {
66+
if (map.get(key) != null) {
67+
Node node = map.get(key);
68+
node.value = value;
69+
deleteNode(node);
70+
addToHead(node);
71+
} else {
72+
Node node = new Node(key, value);
73+
map.put(key, node);
74+
if (count < capicity) {
75+
count++;
76+
addToHead(node);
77+
} else {
78+
map.remove(tail.pre.key);
79+
deleteNode(tail.pre);
80+
addToHead(node);
81+
}
82+
}
83+
}
84+
}
85+
}

readme.md

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -27,55 +27,55 @@ Welcome to improve this project with me.*
2727
| 002 | [Add Two Numbers](https://leetcode.com/problems/add-two-numbers/) |Medium| [Java](./code/lc2.java)
2828
| 003 | [Longest Substring Without Repeating Characters](https://leetcode.com/problems/longest-substring-without-repeating-characters/) | Medium | [Java](./code/lc3.java)
2929
| 004 | [Median of Two Sorted Arrays](https://leetcode.com/problems/median-of-two-sorted-arrays) | Hard | [Java](./code/lc4.java)
30-
| 005 | [Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring/) |Medium|[Java]
31-
| 010 | [Regular Expression Matching](https://leetcode.com/problems/regular-expression-matching/) | Hard | [Java]
32-
| 011 | [Container With Most Water](https://leetcode.com/problems/container-with-most-water/) |Medium| [Java]
33-
| 015 | [3Sum](https://leetcode.com/problems/3sum/) |Medium| [Java]
34-
| 017 | [Letter Combinations of a Phone Number](https://leetcode.com/problems/letter-combinations-of-a-phone-number/) |Medium| [Java]
35-
| 019 | [Remove Nth Node From End of List](https://leetcode.com/problems/remove-nth-node-from-end-of-list/) | Easy | [Java]
36-
| 020 | [Valid Parentheses](https://leetcode.com/problems/valid-parentheses/) | Easy | [Java]
37-
| 021 | [Merge Two Sorted Lists](https://leetcode.com/problems/merge-two-sorted-lists/) | Easy | [Java]
38-
| 022 | [Generate Parentheses](https://leetcode.com/problems/generate-parentheses/) |Medium| [Java]
39-
| 023 | [Merge k Sorted Lists](https://leetcode.com/problems/merge-k-sorted-lists/) | Hard | [Java]
40-
| 032 | [Longest Valid Parentheses](https://leetcode.com/problems/longest-valid-parentheses/) | Hard | [Java]
41-
| 033 | [Search in Rotated Sorted Array](https://leetcode.com/problems/search-in-rotated-sorted-array/) |Medium| [Java]
42-
| 034 | [Search for a Range](https://leetcode.com/problems/search-for-a-range/) |Medium| [Java]
43-
| 035 | [Search Insert Position](https://leetcode.com/problems/search-insert-position/) |Medium| [Java]
44-
| 039 | [Combination Sum](https://leetcode.com/problems/combination-sum/) |Medium| [Java]
45-
| 042 | [Trapping Rain Water](https://leetcode.com/problems/trapping-rain-water/) | Hard | [Java]
46-
| 046 | [Permutations](https://leetcode.com/problems/permutations/) |Medium| [Java] |
47-
| 048 | [Rotate Image](https://leetcode.com/problems/rotate-image/) |Medium| [Java]
48-
| 049 | [Group Anagrams](https://leetcode.com/problems/anagrams/)|Medium| [Java]
49-
| 053 | [Maximum Subarray](https://leetcode.com/problems/maximum-subarray/) |Medium| [Java]
50-
| 055 | [Jump Game](https://leetcode.com/problems/jump-game/) |Medium| [Java]
51-
| 056 | [Merge Intervals](https://leetcode.com/problems/merge-intervals/) |Medium| [Java]
52-
| 062 | [Unique Paths](https://leetcode.com/problems/unique-paths/) |Medium| [Java]
53-
| 064 | [Minimum Path Sum](https://leetcode.com/problems/minimum-path-sum/) |Medium| [Java]
54-
| 070 | [Climbing Stairs](https://leetcode.com/problems/climbing-stairs/) | Easy | [Java]
55-
| 072 | [Edit Distance](https://leetcode.com/problems/edit-distance/) | Hard | [Java]
56-
| 075 | [Sort Colors](https://leetcode.com/problems/sort-colors/)|Medium| [Java]
57-
| 076 | [Minimum Window Substring](https://leetcode.com/problems/minimum-window-substring) | Hard| [Java]
58-
| 078 | [Subsets](https://leetcode.com/problems/subsets/) |Medium| [Java]
59-
| 079 | [Word Search](https://leetcode.com/problems/word-search/)|Medium| [Java]
60-
| 084 | [Largest Rectangle in Histogram](https://leetcode.com/problems/largest-rectangle-in-histogram) | Hard | [Java]
61-
| 085 | [Maximal Rectangle](https://leetcode.com/problems/maximal-rectangle) | Hard |[Java]
62-
| 094 | [Binary Tree Inorder Traversal](https://leetcode.com/problems/binary-tree-inorder-traversal/) |Medium| [Java]
63-
| 096 | [Unique Binary Search Trees](https://leetcode.com/problems/unique-binary-search-trees/) |Medium| [Java]
64-
| 098 | [Validate Binary Search Tree](https://leetcode.com/problems/validate-binary-search-tree/) |Medium| [Java]
65-
| 100 | [Same Tree](https://leetcode.com/problems/same-tree/) | Easy | [Java]
66-
| 101 | [Symmetric Tree](https://leetcode.com/problems/symmetric-tree/) | Easy | [Java]
67-
| 102 | [Binary Tree Level Order Traversal](https://leetcode.com/problems/binary-tree-level-order-traversal/) | Easy | [Java]
68-
| 104 | [Maximum Depth of Binary Tree](https://leetcode.com/problems/maximum-depth-of-binary-tree/) | Easy | [Java]
69-
| 105 | [Construct Binary Tree from Preorder and Inorder Traversal](https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/) |Medium| [Java]
70-
| 114 | [Flatten Binary Tree to Linked List](https://leetcode.com/problems/flatten-binary-tree-to-linked-list/) |Medium| [Java]
71-
| 121 | [Best Time to Buy and Sell Stock](https://leetcode.com/problems/best-time-to-buy-and-sell-stock/) | Easy | [Java]
72-
| 124 | [Binary Tree Maximum Path Sum](https://leetcode.com/problems/binary-tree-maximum-path-sum/) | Hard | [Java]
73-
| 128 | [Longest Consecutive Sequence](https://leetcode.com/problems/longest-consecutive-sequence/) | Hard | [Java]
74-
| 136 | [Single Number](https://leetcode.com/problems/single-number) | Easy | [Java]
75-
| 139 | [Word Break](https://leetcode.com/problems/word-break/) |Medium| [Java]
76-
| 141 | [Linked List Cycle](https://leetcode.com/problems/linked-list-cycle/) | Easy | [Java]
77-
| 142 | [Linked List Cycle II](https://leetcode.com/problems/linked-list-cycle-ii/) |Medium| [Java]
78-
| 146 | [LRU Cache](https://leetcode.com/problems/lru-cache/) | Hard | [Java] |
30+
| 005 | [Longest Palindromic Substring](https://leetcode.com/problems/longest-palindromic-substring/) |Medium|[Java](./code/lc5.java)
31+
| 010 | [Regular Expression Matching](https://leetcode.com/problems/regular-expression-matching/) | Hard | [Java](./code/lc10.java)
32+
| 011 | [Container With Most Water](https://leetcode.com/problems/container-with-most-water/) |Medium| [Java](./code/lc11.java)
33+
| 015 | [3Sum](https://leetcode.com/problems/3sum/) |Medium| [Java](./code/lc15.java)
34+
| 017 | [Letter Combinations of a Phone Number](https://leetcode.com/problems/letter-combinations-of-a-phone-number/) |Medium| [Java](./code/lc17.java)
35+
| 019 | [Remove Nth Node From End of List](https://leetcode.com/problems/remove-nth-node-from-end-of-list/) | Easy | [Java](./code/lc19.java)
36+
| 020 | [Valid Parentheses](https://leetcode.com/problems/valid-parentheses/) | Easy | [Java](./code/lc20.java)
37+
| 021 | [Merge Two Sorted Lists](https://leetcode.com/problems/merge-two-sorted-lists/) | Easy | [Java](./code/lc21.java)
38+
| 022 | [Generate Parentheses](https://leetcode.com/problems/generate-parentheses/) |Medium| [Java] (./code/lc22.java)
39+
| 023 | [Merge k Sorted Lists](https://leetcode.com/problems/merge-k-sorted-lists/) | Hard | [Java](./code/lc23.java)
40+
| 032 | [Longest Valid Parentheses](https://leetcode.com/problems/longest-valid-parentheses/) | Hard | [Java](./code/lc32.java)
41+
| 033 | [Search in Rotated Sorted Array](https://leetcode.com/problems/search-in-rotated-sorted-array/) |Medium| [Java](./code/lc33.java)
42+
| 034 | [Search for a Range](https://leetcode.com/problems/search-for-a-range/) |Medium| [Java](./code/lc34.java)
43+
| 035 | [Search Insert Position](https://leetcode.com/problems/search-insert-position/) |Medium| [Java](./code/lc35.java)
44+
| 039 | [Combination Sum](https://leetcode.com/problems/combination-sum/) |Medium| [Java](./code/lc39.java)
45+
| 042 | [Trapping Rain Water](https://leetcode.com/problems/trapping-rain-water/) | Hard | [Java](./code/lc42.java)
46+
| 046 | [Permutations](https://leetcode.com/problems/permutations/) |Medium| [Java](./code/lc46.java)
47+
| 048 | [Rotate Image](https://leetcode.com/problems/rotate-image/) |Medium| [Java](./code/lc48.java)
48+
| 049 | [Group Anagrams](https://leetcode.com/problems/anagrams/)|Medium| [Java](./code/lc49.java)
49+
| 053 | [Maximum Subarray](https://leetcode.com/problems/maximum-subarray/) |Medium| [Java](./code/lc53.java)
50+
| 055 | [Jump Game](https://leetcode.com/problems/jump-game/) |Medium| [Java](./code/lc55.java)
51+
| 056 | [Merge Intervals](https://leetcode.com/problems/merge-intervals/) |Medium| [Java](./code/lc56.java)
52+
| 062 | [Unique Paths](https://leetcode.com/problems/unique-paths/) |Medium| [Java](./code/lc62.java)
53+
| 064 | [Minimum Path Sum](https://leetcode.com/problems/minimum-path-sum/) |Medium| [Java](./code/lc64.java)
54+
| 070 | [Climbing Stairs](https://leetcode.com/problems/climbing-stairs/) | Easy | [Java](./code/lc70.java)
55+
| 072 | [Edit Distance](https://leetcode.com/problems/edit-distance/) | Hard | [Java](./code/lc72.java)
56+
| 075 | [Sort Colors](https://leetcode.com/problems/sort-colors/)|Medium| [Java](./code/lc75.java)
57+
| 076 | [Minimum Window Substring](https://leetcode.com/problems/minimum-window-substring) | Hard| [Java](./code/lc76.java)
58+
| 078 | [Subsets](https://leetcode.com/problems/subsets/) |Medium| [Java](./code/lc.java)(./code/lc78.java)
59+
| 079 | [Word Search](https://leetcode.com/problems/word-search/)|Medium| [Java](./code/lc79.java)
60+
| 084 | [Largest Rectangle in Histogram](https://leetcode.com/problems/largest-rectangle-in-histogram) | Hard | [Java](./code/lc84.java)
61+
| 085 | [Maximal Rectangle](https://leetcode.com/problems/maximal-rectangle) | Hard |[Java](./code/lc85.java)
62+
| 094 | [Binary Tree Inorder Traversal](https://leetcode.com/problems/binary-tree-inorder-traversal/) |Medium| [Java](./code/lc94.java)
63+
| 096 | [Unique Binary Search Trees](https://leetcode.com/problems/unique-binary-search-trees/) |Medium| [Java](./code/lc96.java)
64+
| 098 | [Validate Binary Search Tree](https://leetcode.com/problems/validate-binary-search-tree/) |Medium| [Java](./code/lc98.java)
65+
| 100 | [Same Tree](https://leetcode.com/problems/same-tree/) | Easy | [Java](./code/lc100.java)
66+
| 101 | [Symmetric Tree](https://leetcode.com/problems/symmetric-tree/) | Easy | [Java](./code/lc101.java)
67+
| 102 | [Binary Tree Level Order Traversal](https://leetcode.com/problems/binary-tree-level-order-traversal/) | Easy | [Java](./code/lc102.java)
68+
| 104 | [Maximum Depth of Binary Tree](https://leetcode.com/problems/maximum-depth-of-binary-tree/) | Easy | [Java](./code/lc104.java)
69+
| 105 | [Construct Binary Tree from Preorder and Inorder Traversal](https://leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/) |Medium| [Java](./code/lc105.java)
70+
| 114 | [Flatten Binary Tree to Linked List](https://leetcode.com/problems/flatten-binary-tree-to-linked-list/) |Medium| [Java](./code/lc114.java)
71+
| 121 | [Best Time to Buy and Sell Stock](https://leetcode.com/problems/best-time-to-buy-and-sell-stock/) | Easy | [Java](./code/lc121.java)
72+
| 124 | [Binary Tree Maximum Path Sum](https://leetcode.com/problems/binary-tree-maximum-path-sum/) | Hard | [Java](./code/lc124.java)
73+
| 128 | [Longest Consecutive Sequence](https://leetcode.com/problems/longest-consecutive-sequence/) | Hard | [Java](./code/lc128.java)
74+
| 136 | [Single Number](https://leetcode.com/problems/single-number) | Easy | [Java](./code/lc136.java)
75+
| 139 | [Word Break](https://leetcode.com/problems/word-break/) |Medium| [Java](./code/lc139.java)
76+
| 141 | [Linked List Cycle](https://leetcode.com/problems/linked-list-cycle/) | Easy | [Java](./code/lc141.java)
77+
| 142 | [Linked List Cycle II](https://leetcode.com/problems/linked-list-cycle-ii/) |Medium| [Java](./code/lc142.java)
78+
| 146 | [LRU Cache](https://leetcode.com/problems/lru-cache/) | Hard | [Java](./code/lc146.java)
7979
| 148 | [Sort List](https://leetcode.com/problems/sort-list/) |Medium| [Java]
8080
| 152 | [Maximum Product Subarray](https://leetcode.com/problems/maximum-product-subarray/) |Medium| [Java]
8181
| 155 | [Min Stack](https://leetcode.com/problems/min-stack/) | Easy | [Java]

0 commit comments

Comments
 (0)