Skip to content

Commit 09371df

Browse files
committed
20190110
1 parent 7ccd186 commit 09371df

File tree

5 files changed

+159
-17
lines changed

5 files changed

+159
-17
lines changed

code/lc10.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public static boolean isMatch(String s, String p) {
3232
}else{
3333
dp[i][j] = (dp[i-1][j] || dp[i-1][j-1] || dp[i][j-2]);
3434
//dp[i-1][j] * 表示前面字符出现多次
35-
//dp[i-1][j-1] * 表示前面字符出现一次
35+
//dp[i-1][j-1] * 表示前面字符出现一次 dp[i]dp[j-1]也行
3636
// dp[i][j-2] *表示前边字符出现0次,覆盖这些情况. s="ba" p="baa*"; s="a" p="ab*a*"
3737
}
3838
}

code/lc236.java

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package code;
2+
3+
import java.util.*;
4+
5+
/*
6+
* 236. Lowest Common Ancestor of a Binary Tree
7+
* 题意:二叉树上两个节点的公共祖先
8+
* 难度:Medium
9+
* 分类:Tree
10+
* 思路:递归,迭代两种方法
11+
* Tips:注意递归时怎么返回。很经典的题目。
12+
*/
13+
public class lc236 {
14+
public class TreeNode {
15+
int val;
16+
TreeNode left;
17+
TreeNode right;
18+
TreeNode(int x) { val = x; }
19+
}
20+
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {//递归
21+
if( root==null || root==p || root==q )
22+
return root;
23+
TreeNode left = lowestCommonAncestor(root.left, p, q);
24+
TreeNode right = lowestCommonAncestor(root.right, p, q);
25+
if( left!=null && right!=null ) //回溯返回。哪边不为空,返回哪边,否则返回自己。
26+
return root;
27+
else if(left!=null)
28+
return left;
29+
else return right;
30+
}
31+
32+
public TreeNode lowestCommonAncestor2(TreeNode root, TreeNode p, TreeNode q) {
33+
Map<TreeNode, TreeNode> parent = new HashMap<>(); //用map存储节点的父亲节点,便于查找
34+
Stack<TreeNode> stack = new Stack<>();
35+
parent.put(root, null);
36+
stack.push(root);
37+
38+
while (!parent.containsKey(p) || !parent.containsKey(q)) {
39+
TreeNode node = stack.pop();
40+
if (node.left != null) {
41+
parent.put(node.left, node);
42+
stack.push(node.left);
43+
}
44+
if (node.right != null) {
45+
parent.put(node.right, node);
46+
stack.push(node.right);
47+
}
48+
}
49+
Set<TreeNode> ancestors = new HashSet<>();
50+
while (p != null) {
51+
ancestors.add(p);
52+
p = parent.get(p);
53+
}
54+
while (!ancestors.contains(q))
55+
q = parent.get(q);
56+
return q;
57+
}
58+
}

code/lc238.java

+25
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package code;
2+
/*
3+
* 238. Product of Array Except Self
4+
* 题意:数组中除了nums[i]的乘积
5+
* 难度:Medium
6+
* 分类:Array
7+
* 思路:左右两个方向简单dp,空间压缩以后可以直接迭代的方法算
8+
* Tips:
9+
*/
10+
public class lc238 {
11+
public int[] productExceptSelf(int[] nums) {
12+
int[] res = new int[nums.length];
13+
res[0] = 1;
14+
for (int i = 1; i < nums.length; i++) {
15+
res[i] = res[i-1]*nums[i-1];
16+
}
17+
int temp = 1; //用temp记录右边值,每次迭代一下
18+
res[nums.length-1] = res[nums.length-1] * temp;
19+
for (int i = nums.length-2; i>=0 ; i--) {
20+
temp = temp * nums[i+1];
21+
res[i] = res[i] * temp;
22+
}
23+
return res;
24+
}
25+
}

code/lc297.java

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package code;
2+
3+
import java.util.Arrays;
4+
import java.util.Deque;
5+
import java.util.LinkedList;
6+
7+
/*
8+
* 297. Serialize and Deserialize Binary Tree
9+
* 题意:序列化,反序列化树
10+
* 难度:Hard
11+
* 分类:Tree, Design
12+
* 思路:
13+
* Tips:
14+
*/
15+
public class lc297 {
16+
public class TreeNode {
17+
int val;
18+
TreeNode left;
19+
TreeNode right;
20+
TreeNode(int x) { val = x; }
21+
}
22+
public class Codec {
23+
private static final String spliter = ",";
24+
private static final String NN = "X";
25+
26+
// Encodes a tree to a single string.
27+
public String serialize(TreeNode root) {
28+
StringBuilder sb = new StringBuilder();
29+
buildString(root, sb);
30+
return sb.toString();
31+
}
32+
33+
private void buildString(TreeNode node, StringBuilder sb) {
34+
if (node == null) {
35+
sb.append(NN).append(spliter);
36+
} else {
37+
sb.append(node.val).append(spliter);
38+
buildString(node.left, sb);
39+
buildString(node.right,sb);
40+
}
41+
}
42+
// Decodes your encoded data to tree.
43+
public TreeNode deserialize(String data) {
44+
Deque<String> nodes = new LinkedList<>();
45+
nodes.addAll(Arrays.asList(data.split(spliter)));
46+
return buildTree(nodes);
47+
}
48+
49+
private TreeNode buildTree(Deque<String> nodes) {
50+
String val = nodes.remove();
51+
if (val.equals(NN)) return null;
52+
else {
53+
TreeNode node = new TreeNode(Integer.valueOf(val));
54+
node.left = buildTree(nodes);
55+
node.right = buildTree(nodes);
56+
return node;
57+
}
58+
}
59+
}
60+
}

readme.md

+15-16
Original file line numberDiff line numberDiff line change
@@ -79,26 +79,25 @@ Welcome to improve this project with me.*
7979
| 148 | [Sort List](https://leetcode.com/problems/sort-list/) |Medium| [Java](./code/lc148.java)
8080
| 152 | [Maximum Product Subarray](https://leetcode.com/problems/maximum-product-subarray/) |Medium| [Java](./code/lc152.java)
8181
| 155 | [Min Stack](https://leetcode.com/problems/min-stack/) | Easy | [Java](./code/lc155.java)
82-
| 160 | [Intersection of Two Linked Lists](https://leetcode.com/problems/intersection-of-two-linked-lists/) | Easy | [Java]
83-
| 169 | [Majority Element](https://leetcode.com/problems/majority-element/) | Easy | [Java]
84-
| 198 | [House Robber](https://leetcode.com/problems/house-robber/) | Easy | [Java]
85-
| 200 | [Number of Islands](https://leetcode.com/problems/number-of-islands/) |Medium| [Java]
86-
| 206 | [Reverse Linked List](https://leetcode.com/problems/reverse-linked-list/) | Easy |[Java]
87-
| 207 | [Course Schedule](https://leetcode.com/problems/course-schedule/) |Medium|[Java]
88-
| 208 | [Implement Trie (Prefix Tree)](https://leetcode.com/problems/implement-trie-prefix-tree/) |Medium| [Java]
89-
| 215 | [Kth Largest Element in an Array](https://leetcode.com/problems/kth-largest-element-in-an-array/) |Medium| [Java]
90-
| 218 | [Subarray Sum Equals K](https://leetcode.com/problems/subarray-sum-equals-k) | Hard |[Java]
91-
| 221 | [Maximal Square](https://leetcode.com/problems/maximal-square/) |Medium| [Java]
92-
| 226 | [Invert Binary Tree](https://leetcode.com/problems/invert-binary-tree/) | Easy | [Java]
93-
| 234 | [Palindrome Linked List](https://leetcode.com/problems/palindrome-linked-list/) | Easy | [Java]
94-
| 236 | [Lowest Common Ancestor of a Binary Tree](https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/) |Medium| [Java]
95-
| 238 | [Product of Array Except Self](https://leetcode.com/problems/product-of-array-except-self/) |Medium| [Java]
96-
| 239 | [Sliding Window Maximum](https://leetcode.com/problems/sliding-window-maximum/) | Hard | [Java] |
82+
| 160 | [Intersection of Two Linked Lists](https://leetcode.com/problems/intersection-of-two-linked-lists/) | Easy | [Java](./code/lc160.java)
83+
| 169 | [Majority Element](https://leetcode.com/problems/majority-element/) | Easy | [Java](./code/lc169.java)
84+
| 198 | [House Robber](https://leetcode.com/problems/house-robber/) | Easy | [Java](./code/lc198.java)
85+
| 200 | [Number of Islands](https://leetcode.com/problems/number-of-islands/) |Medium| [Java](./code/lc200.java)
86+
| 206 | [Reverse Linked List](https://leetcode.com/problems/reverse-linked-list/) | Easy |[Java](./code/lc206.java)
87+
| 207 | [Course Schedule](https://leetcode.com/problems/course-schedule/) |Medium|[Java](./code/lc207.java)
88+
| 208 | [Implement Trie (Prefix Tree)](https://leetcode.com/problems/implement-trie-prefix-tree/) |Medium| [Java](./code/lc208.java)
89+
| 215 | [Kth Largest Element in an Array](https://leetcode.com/problems/kth-largest-element-in-an-array/) |Medium| [Java](./code/lc215.java)
90+
| 221 | [Maximal Square](https://leetcode.com/problems/maximal-square/) |Medium| [Java](./code/lc221.java)
91+
| 226 | [Invert Binary Tree](https://leetcode.com/problems/invert-binary-tree/) | Easy | [Java](./code/lc226.java)
92+
| 234 | [Palindrome Linked List](https://leetcode.com/problems/palindrome-linked-list/) | Easy | [Java](./code/lc234.java)
93+
| 236 | [Lowest Common Ancestor of a Binary Tree](https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/) |Medium| [Java](./code/lc236.java)
94+
| 238 | [Product of Array Except Self](https://leetcode.com/problems/product-of-array-except-self/) |Medium| [Java](./code/lc238.java)
95+
| 239 | [Sliding Window Maximum](https://leetcode.com/problems/sliding-window-maximum/) | Hard | [Java](./code/lc239.java)
9796
| 240 | [Search a 2D Matrix II](https://leetcode.com/problems/search-a-2d-matrix-ii/) |Medium| [Java]
9897
| 279 | [Perfect Squares](https://leetcode.com/problems/perfect-squares/) |Medium| [Java]
9998
| 283 | [Move Zeroes](https://leetcode.com/problems/move-zeroes/)| Easy | [Java]
10099
| 287 | [Find the Duplicate Number](https://leetcode.com/problems/find-the-duplicate-number/) | Hard | [Java]
101-
| 297 | [Serialize and Deserialize Binary Tree](https://leetcode.com/problems/serialize-and-deserialize-binary-tree/) | Hard | [Java]
100+
| 297 | [Serialize and Deserialize Binary Tree](https://leetcode.com/problems/serialize-and-deserialize-binary-tree/) | Hard | [Java](./code/lc297.java)
102101
| 300 | [Longest Increasing Subsequence](https://leetcode.com/problems/longest-increasing-subsequence/) |Medium| [Java]
103102
| 309 | [Best Time to Buy and Sell Stock with Cooldown](https://leetcode.com/problems/best-time-to-buy-and-sell-stock-with-cooldown/) |Medium| [Java]
104103
| 312 | [Burst Balloons](https://leetcode.com/problems/burst-balloons/) | Hard | [Java]

0 commit comments

Comments
 (0)