Skip to content

Commit f481501

Browse files
author
ChienkuChen
committed
Add lot ...
1 parent 57bde1b commit f481501

34 files changed

+1339
-375
lines changed

src/_105/105.construct-binary-tree-from-preorder-and-inorder-traversal.java

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -13,34 +13,32 @@
1313
*/
1414
class Solution {
1515
public TreeNode buildTree(int[] preorder, int[] inorder) {
16-
return helper(preorder, 0, preorder.length - 1, inorder, 0, inorder.length - 1);
16+
return helper(preorder, inorder, 0, preorder.length - 1, 0, inorder.length - 1);
1717
}
1818

19-
private TreeNode helper(int[] preorder, int preorderStart, int preorderEnd,
20-
int[] inorder, int inorderStart, int inorderEnd) {
21-
if (preorderStart > preorderEnd || inorderStart > inorderEnd)
19+
private TreeNode helper(int[] preorder, int[] inorder, int pStart, int pEnd, int iStart, int iEnd) {
20+
if (pStart > pEnd || iStart > iEnd)
2221
return null;
2322

24-
TreeNode root = new TreeNode(preorder[preorderStart]);
25-
26-
int rootIndex = findTarget(inorder, inorderStart, inorderEnd, preorder[preorderStart]);
27-
28-
root.left = helper(preorder, preorderStart + 1, (rootIndex - inorderStart + preorderStart),
29-
inorder, inorderStart, rootIndex - 1);
30-
31-
root.right = helper(preorder, (rootIndex - inorderStart + preorderStart + 1), preorderEnd,
32-
inorder, rootIndex + 1, inorderEnd);
23+
TreeNode root = new TreeNode(preorder[pStart]);
24+
int index = find(inorder, preorder[pStart], iStart, iEnd);
25+
root.left = helper(preorder, inorder, pStart + 1, index - iStart + pStart, iStart, index - 1);
26+
root.right = helper(preorder, inorder, index - iStart + pStart + 1, pEnd, index + 1, iEnd);
3327

3428
return root;
3529
}
3630

37-
private int findTarget(int[] a, int start, int end, int target) {
31+
private int find(int[] a, int target, int start, int end) {
3832
for (int i = start; i <= end; i++) {
39-
if (a[i] == target) {
33+
if (a[i] == target)
4034
return i;
41-
}
4235
}
4336

4437
return -1;
4538
}
39+
40+
41+
public static void main(String[] args) {
42+
System.out.println(new Solution().buildTree(new int[]{3, 9, 20, 15, 7}, new int[]{9, 3, 15, 20, 7}).toString());
43+
}
4644
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package _105;
2+
3+
import datastructure.TreeNode;
4+
5+
/**
6+
* Definition for a binary tree node.
7+
* public class TreeNode {
8+
* int val;
9+
* TreeNode left;
10+
* TreeNode right;
11+
* TreeNode(int x) { val = x; }
12+
* }
13+
*/
14+
class Solution {
15+
public TreeNode buildTree(int[] preorder, int[] inorder) {
16+
return helper(preorder, 0, preorder.length - 1, inorder, 0, inorder.length - 1);
17+
}
18+
19+
private TreeNode helper(int[] preorder, int preorderStart, int preorderEnd,
20+
int[] inorder, int inorderStart, int inorderEnd) {
21+
if (preorderStart > preorderEnd || inorderStart > inorderEnd)
22+
return null;
23+
24+
TreeNode root = new TreeNode(preorder[preorderStart]);
25+
26+
int rootIndex = findTarget(inorder, inorderStart, inorderEnd, preorder[preorderStart]);
27+
28+
root.left = helper(preorder, preorderStart + 1, (rootIndex - inorderStart + preorderStart),
29+
inorder, inorderStart, rootIndex - 1);
30+
31+
root.right = helper(preorder, (rootIndex - inorderStart + preorderStart + 1), preorderEnd,
32+
inorder, rootIndex + 1, inorderEnd);
33+
34+
return root;
35+
}
36+
37+
private int findTarget(int[] a, int start, int end, int target) {
38+
for (int i = start; i <= end; i++) {
39+
if (a[i] == target) {
40+
return i;
41+
}
42+
}
43+
44+
return -1;
45+
}
46+
}

src/_131/131.palindrome-partitioning.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,12 @@ private void helper(String s, int start, List<String> current, List<List<String>
2020
return;
2121
}
2222

23-
for (int i = start; i < s.length(); i++) {
24-
String part = (i == start) ? String.valueOf(s.charAt(i)) : s.substring(start, i + 1);
23+
for (int i = start + 1; i <= s.length(); i++) {
24+
String part = s.substring(start, i);
2525

2626
if (isPalindrome(part)) {
2727
current.add(part);
28-
helper(s, i + 1, current, result);
28+
helper(s, i, current, result);
2929
current.remove(current.size() - 1);
3030
}
3131

src/_134/134.gas-station.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@
22

33
class Solution {
44
public int canCompleteCircuit(int[] gas, int[] cost) {
5-
int tank = 0;
65
int start = 0;
6+
int tank = 0;
77
int total = 0;
88

99
for (int i = 0; i < gas.length; i++) {
1010
tank += gas[i] - cost[i];
11+
1112
if (tank < 0) {
1213
start = i + 1;
1314
total += tank;

src/_134/134.gas-station.java.bak

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package _134;
2+
3+
class Solution {
4+
public int canCompleteCircuit(int[] gas, int[] cost) {
5+
int tank = 0;
6+
int start = 0;
7+
int total = 0;
8+
9+
for (int i = 0; i < gas.length; i++) {
10+
tank += gas[i] - cost[i];
11+
if (tank < 0) {
12+
start = i + 1;
13+
total += tank;
14+
tank = 0;
15+
}
16+
}
17+
18+
return (total + tank) < 0 ? -1 : start;
19+
}
20+
}

src/_139/139.word-break.java

Lines changed: 32 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,66 +1,32 @@
1-
//import java.util.*;
2-
//
3-
//class Solution {
4-
//// public boolean wordBreak(String s, List<String> wordDict) {
5-
//// Deque<String> deque = new ArrayDeque<>();
6-
//// deque.offer(s);
7-
////
8-
//// while (!deque.isEmpty()) {
9-
//// String tmp = deque.poll();
10-
////
11-
//// for (int i = 0; i < wordDict.size(); i++) {
12-
//// String word = wordDict.get(i);
13-
//// if (tmp.equals(word))
14-
//// return true;
15-
////
16-
//// if (tmp.startsWith(word)) {
17-
//// deque.offer(tmp.substring(word.length()));
18-
//// }
19-
//// }
20-
//// }
21-
////
22-
//// return false;
23-
//// }
24-
//
25-
// public boolean wordBreak(String s, List<String> wordDict) {
26-
// // store index of s
27-
// Deque<Integer> deque = new ArrayDeque<>();
28-
// deque.offer(0);
29-
//
30-
// // store visited index
31-
// Set<Integer> set = new HashSet<>();
32-
//
33-
// while (!deque.isEmpty()) {
34-
// Integer index = deque.poll();
35-
// for (int i = index + 1; i <= s.length(); i++) {
36-
// if (set.contains(i))
37-
// continue;
38-
//
39-
// String tmp = s.substring(index, i);
40-
// if (wordDict.contains(tmp)) {
41-
// if (i == s.length())
42-
// return true;
43-
// deque.offer(i);
44-
// set.add(i);
45-
// }
46-
// }
47-
// }
48-
//
49-
// return false;
50-
// }
51-
//
52-
//
53-
// public static void main(String[] args) {
54-
// System.out.println(new Solution().
55-
// wordBreak("abcdefghix",
56-
// Arrays.asList("abcde", "fghi", "fg", "hi", "x")));
57-
//// System.out.println(new Solution().
58-
//// wordBreak("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
59-
//// Arrays.asList("a", "aa", "aaa", "aaaa", "aaaaa", "aaaaaa", "aaaaaaa", "aaaaaaaa", "aaaaaaaaa", "aaaaaaaaaa")));
60-
////
61-
//// System.out.println(
62-
//// new Solution().wordBreak(
63-
//// "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
64-
//// Arrays.asList("a", "aa", "aaa", "aaaa", "aaaaa", "aaaaaa", "aaaaaaa", "aaaaaaaa", "aaaaaaaaa", "aaaaaaaaaa")));
65-
// }
66-
//}
1+
package _139;
2+
3+
import java.util.Arrays;
4+
import java.util.HashSet;
5+
import java.util.List;
6+
import java.util.Set;
7+
8+
class Solution {
9+
public boolean wordBreak(String s, List<String> wordDict) {
10+
boolean[] dp = new boolean[s.length() + 1];
11+
Set<String> set = new HashSet<>(wordDict);
12+
13+
dp[0] = true;
14+
for (int i = 1; i < dp.length; i++) {
15+
for (int j = i - 1; j >= 0; j--) {
16+
if (dp[j] && set.contains(s.substring(j, i))) {
17+
dp[i] = true;
18+
break;
19+
}
20+
}
21+
}
22+
23+
return dp[s.length()];
24+
}
25+
26+
public static void main(String[] args) {
27+
System.out.println(new Solution().wordBreak("leetcode", Arrays.asList("leet", "code")));
28+
System.out.println(new Solution().wordBreak("applepenapple", Arrays.asList("apple", "pen")));
29+
System.out.println(new Solution().wordBreak("catsandog", Arrays.asList("cats", "dog", "sand", "and", "cat")));
30+
}
31+
32+
}

src/_139/139.word-break.java.bak

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
//import java.util.*;
2+
//
3+
//class Solution {
4+
//// public boolean wordBreak(String s, List<String> wordDict) {
5+
//// Deque<String> deque = new ArrayDeque<>();
6+
//// deque.offer(s);
7+
////
8+
//// while (!deque.isEmpty()) {
9+
//// String tmp = deque.poll();
10+
////
11+
//// for (int i = 0; i < wordDict.size(); i++) {
12+
//// String word = wordDict.get(i);
13+
//// if (tmp.equals(word))
14+
//// return true;
15+
////
16+
//// if (tmp.startsWith(word)) {
17+
//// deque.offer(tmp.substring(word.length()));
18+
//// }
19+
//// }
20+
//// }
21+
////
22+
//// return false;
23+
//// }
24+
//
25+
// public boolean wordBreak(String s, List<String> wordDict) {
26+
// // store index of s
27+
// Deque<Integer> deque = new ArrayDeque<>();
28+
// deque.offer(0);
29+
//
30+
// // store visited index
31+
// Set<Integer> set = new HashSet<>();
32+
//
33+
// while (!deque.isEmpty()) {
34+
// Integer index = deque.poll();
35+
// for (int i = index + 1; i <= s.length(); i++) {
36+
// if (set.contains(i))
37+
// continue;
38+
//
39+
// String tmp = s.substring(index, i);
40+
// if (wordDict.contains(tmp)) {
41+
// if (i == s.length())
42+
// return true;
43+
// deque.offer(i);
44+
// set.add(i);
45+
// }
46+
// }
47+
// }
48+
//
49+
// return false;
50+
// }
51+
//
52+
//
53+
// public static void main(String[] args) {
54+
// System.out.println(new Solution().
55+
// wordBreak("abcdefghix",
56+
// Arrays.asList("abcde", "fghi", "fg", "hi", "x")));
57+
//// System.out.println(new Solution().
58+
//// wordBreak("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaab",
59+
//// Arrays.asList("a", "aa", "aaa", "aaaa", "aaaaa", "aaaaaa", "aaaaaaa", "aaaaaaaa", "aaaaaaaaa", "aaaaaaaaaa")));
60+
////
61+
//// System.out.println(
62+
//// new Solution().wordBreak(
63+
//// "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
64+
//// Arrays.asList("a", "aa", "aaa", "aaaa", "aaaaa", "aaaaaa", "aaaaaaa", "aaaaaaaa", "aaaaaaaaa", "aaaaaaaaaa")));
65+
// }
66+
//}

0 commit comments

Comments
 (0)