Skip to content

Commit fdcfaaa

Browse files
committed
My Solution
Fisrt
1 parent 3c0b4e6 commit fdcfaaa

File tree

129 files changed

+6181
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

129 files changed

+6181
-0
lines changed

My Solutions/AddTwoNumbers.java

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import java.util.*;
2+
3+
public class AddTwoNumbers {
4+
5+
/**
6+
* @param args
7+
*/
8+
public static void main(String[] args) {
9+
// TODO Auto-generated method stub
10+
11+
}
12+
13+
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
14+
Deque<Integer> s1 = new ArrayDeque<>();
15+
Deque<Integer> s2 = new ArrayDeque<>();
16+
17+
while (l1 != null) {
18+
s1.push(l1.val);
19+
l1 = l1.next;
20+
}
21+
while (l2 != null) {
22+
s2.push(l2.val);
23+
l2 = l2.next;
24+
}
25+
26+
int carry = 0;
27+
ListNode tail = null;
28+
while (!s1.isEmpty() || !s2.isEmpty()) {
29+
30+
int op1 = s1.isEmpty() ? 0 : s1.pop();
31+
int op2 = s2.isEmpty() ? 0 : s2.pop();
32+
int sum = op1 + op2 + carry;
33+
ListNode n = new ListNode(sum);
34+
n.next = tail;
35+
tail = n;
36+
carry = sum >= 10 ? 1 : 0;
37+
}
38+
if (carry == 1) {
39+
ListNode n = new ListNode(1);
40+
n.next = tail;
41+
tail = n;
42+
}
43+
return tail;
44+
}
45+
46+
}

My Solutions/Anagram.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import java.util.*;
2+
3+
public class Anagram {
4+
5+
/**
6+
* @param args
7+
*/
8+
public static void main(String[] args) {
9+
// TODO Auto-generated method stub
10+
11+
}
12+
13+
public List<String> anagrams(String[] strs) {
14+
List<String> l = new ArrayList<>();
15+
int len = strs.length;
16+
if (len < 2)
17+
return l;
18+
19+
Map<String, List<Integer>> m = new HashMap<>();
20+
Set<String> s = new HashSet<>();
21+
22+
for (int i = 0; i < len; i++) {
23+
String tmp = sort(strs[i]);
24+
List<Integer> list = m.get(tmp);
25+
if (list == null) {
26+
list = new ArrayList<Integer>();
27+
list.add(i);
28+
m.put(tmp, list);
29+
} else {
30+
list.add(i);
31+
s.add(tmp);
32+
}
33+
}
34+
for (String str : s) {
35+
for (int i : m.get(str)) {
36+
l.add(strs[i]);
37+
}
38+
}
39+
return l;
40+
}
41+
42+
private String sort(String s) {
43+
char[] c = s.toCharArray();
44+
Arrays.sort(c);
45+
return new String(c);
46+
}
47+
48+
}

My Solutions/BalancedPartition.java

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
public class BalancedPartition {
2+
3+
/**
4+
* @param args
5+
*/
6+
public static void main(String[] args) {
7+
BalancedPartition bp = new BalancedPartition();
8+
System.out.println(bp.partition(new int[] { 3, 1, 5, 9, 12 }));
9+
10+
}
11+
12+
public boolean partition(int[] nums) {
13+
14+
int sum = 0;
15+
for (int n : nums)
16+
sum += n;
17+
18+
boolean[][] dp = new boolean[nums.length][sum / 2 + 1];
19+
20+
for (int i = 0; i < nums.length; i++) {
21+
dp[i][nums[i]] = true;
22+
dp[i][0] = true;
23+
if (i == 0)
24+
continue;
25+
for (int j = nums[i]; j <= sum / 2; j++) {
26+
dp[i][j] = (dp[i - 1][j] || dp[i][j - nums[i]]);
27+
}
28+
}
29+
30+
for (int i = 0; i < nums.length; i++) {
31+
if (dp[i][sum / 2])
32+
return true;
33+
}
34+
return false;
35+
}
36+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
public class BestTimetoBuyandSellStockIII {
2+
3+
/**
4+
* @param args
5+
*/
6+
public static void main(String[] args) {
7+
// TODO Auto-generated method stub
8+
9+
}
10+
11+
12+
13+
private int[] prices;
14+
15+
public int maxProfit(int[] prices) {
16+
17+
int p = 0;
18+
this.prices = prices;
19+
for (int i = 2; i < prices.length - 2; i++) {
20+
p = Math.max(p, maxProfit(0, i) + maxProfit(i, prices.length));
21+
}
22+
23+
return p;
24+
}
25+
26+
private int maxProfit(int start, int end) {
27+
int p = 0;
28+
for (int i = start; i < end - 1; i++) {
29+
if (prices[i + 1] > prices[i]) {
30+
p += prices[i + 1] - prices[i];
31+
}
32+
}
33+
34+
return p;
35+
}
36+
37+
}

My Solutions/BinaryTreeTraversal.java

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
import java.util.*;
2+
3+
public class BinaryTreeTraversal {
4+
5+
/**
6+
* @param args
7+
*/
8+
public static void main(String[] args) {
9+
// TODO Auto-generated method stub
10+
TreeNode t = new TreeNode(0);
11+
t.left = new TreeNode(1);
12+
t.right = new TreeNode(2);
13+
inorderTraversal(t);
14+
15+
}
16+
17+
public static List<Integer> inorderTraversal(TreeNode root) {
18+
List<Integer> res = new ArrayList<>();
19+
if (root == null)
20+
return res;
21+
22+
Deque<TreeNode> s = new ArrayDeque<>();
23+
s.push(root);
24+
25+
while (!s.isEmpty()) {
26+
TreeNode n = s.pop();
27+
while (n.left != null) {
28+
s.push(n);
29+
n = n.left;
30+
}
31+
res.add(n.val);
32+
if (n.right != null)
33+
s.push(n.right);
34+
}
35+
return res;
36+
}
37+
38+
public static List<Integer> preorderTraversal(TreeNode root) {
39+
List<Integer> res = new LinkedList<>();
40+
if (root == null)
41+
return res;
42+
// recursive(res, root);
43+
Stack<TreeNode> s = new Stack<>();
44+
s.push(root);
45+
TreeNode n;
46+
while (!s.isEmpty()) {
47+
n = s.pop();
48+
res.add(n.val);
49+
if (n.right != null)
50+
s.push(n.right);
51+
if (n.left != null)
52+
s.push(n.left);
53+
}
54+
55+
return res;
56+
}
57+
58+
}
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import java.util.*;
2+
3+
public class BinaryTreeZigzagLevelOrderTraversal {
4+
5+
/**
6+
* @param args
7+
*/
8+
public static void main(String[] args) {
9+
// TODO Auto-generated method stub
10+
11+
}
12+
13+
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
14+
List<List<Integer>> levelOrder = new LinkedList<>();
15+
recursive(root, levelOrder, 0);
16+
adjust(levelOrder);
17+
return levelOrder;
18+
}
19+
20+
private void recursive(TreeNode root, List<List<Integer>> levelOrder,
21+
int level) {
22+
if (root == null)
23+
return;
24+
if (level > levelOrder.size()) {
25+
levelOrder.add(new LinkedList<Integer>());
26+
}
27+
levelOrder.get(level).add(root.val);
28+
recursive(root.left, levelOrder, level + 1);
29+
recursive(root.right, levelOrder, level + 1);
30+
}
31+
32+
private void adjust(List<List<Integer>> levelOrder) {
33+
for (int i = 0; i < levelOrder.size(); i++) {
34+
if ((i & 1) == 1) {
35+
Collections.reverse(levelOrder.get(i));
36+
}
37+
}
38+
return;
39+
}
40+
41+
private List<List<Integer>> naive(TreeNode root) {
42+
List<List<Integer>> ret = new LinkedList<>();
43+
if (root == null)
44+
return ret;
45+
46+
List<Integer> levelList = new LinkedList<>();
47+
levelList.add(root.val);
48+
ret.add(levelList);
49+
50+
Deque<TreeNode> q = new ArrayDeque<>();
51+
52+
q.add(root);
53+
int level = 0;
54+
while (q.size() > 0) {
55+
level++;
56+
levelList = new LinkedList<>();
57+
Deque<TreeNode> newQ = new ArrayDeque<>();
58+
while (q.size() > 0) {
59+
TreeNode n = q.remove();
60+
if (n.left != null) {
61+
newQ.add(n.left);
62+
if (level % 2 == 1)
63+
levelList.add(0, n.left.val);
64+
else
65+
levelList.add(n.left.val);
66+
}
67+
if (n.right != null) {
68+
newQ.add(n.right);
69+
if (level % 2 == 1)
70+
levelList.add(0, n.right.val);
71+
else
72+
levelList.add(n.right.val);
73+
}
74+
}
75+
if (levelList.size() > 0)
76+
ret.add(levelList);
77+
q = newQ;
78+
}
79+
return ret;
80+
}
81+
82+
}

My Solutions/Candy.java

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import java.util.*;
2+
3+
public class Candy {
4+
5+
/**
6+
* @param args
7+
*/
8+
public static void main(String[] args) {
9+
int[] test = { 1, 2, 2};
10+
Candy c = new Candy();
11+
System.out.print(c.candy(test));
12+
}
13+
14+
public int candy(int[] ratings) {
15+
int len = ratings.length;
16+
if (len < 2)
17+
return len; // 0 -> 0, 1 -> 1;
18+
19+
int[] candies = new int[len];
20+
Arrays.fill(candies, 1);
21+
22+
Map<Integer, List<Integer>> m = new HashMap<>();
23+
24+
for (int i = 0; i < len; i++) {
25+
if (m.containsKey(ratings[i])) {
26+
m.get(ratings[i]).add(i);
27+
} else {
28+
List<Integer> l = new ArrayList<>();
29+
l.add(i);
30+
m.put(ratings[i], l);
31+
}
32+
}
33+
34+
Integer[] rs = m.keySet().toArray(new Integer[0]);
35+
Arrays.sort(rs);
36+
37+
for (int i = 1; i < rs.length; i++) { //skip the lowest rating
38+
List<Integer> l = m.get(rs[i]);
39+
for (int j : l) {
40+
if (j - 1 >= 0 && candies[j] <= candies[j - 1])
41+
candies[j] = candies[j - 1] + 1;
42+
if (j + 1 < len && candies[j] <= candies[j + 1])
43+
candies[j] = candies[j + 1] + 1;
44+
}
45+
}
46+
47+
int sum = 0;
48+
for (int i : candies)
49+
sum += i;
50+
return sum;
51+
}
52+
}

My Solutions/CatchThief.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import java.util.Arrays;
2+
3+
public class CatchThief {
4+
5+
/**
6+
* @param args
7+
*/
8+
public static void main(String[] args) {
9+
CatchThief ct = new CatchThief();
10+
System.out.println(ct.canCatch(
11+
new int[] { 1, 2, 3, 4, 5, 5, 4, 3, 2, 1 }, 5));
12+
}
13+
14+
public boolean canCatch(int[] seq, int n) {
15+
16+
boolean[] dp = new boolean[n + 2];
17+
Arrays.fill(dp, true);
18+
19+
dp[0] = dp[seq[0]] = dp[n + 1] = false;
20+
21+
for (int i = 0; i < seq.length; i++)
22+
for (int j = 1; j <= n; j++)
23+
dp[j] = ((dp[j - 1] || dp[j + 1]) && j != seq[i]);
24+
25+
for (int i = 1; i <= n; i++)
26+
if (dp[i])
27+
return false;
28+
29+
return true;
30+
}
31+
}

0 commit comments

Comments
 (0)