Skip to content

Commit 817b7c2

Browse files
authored
Merge pull request #1416 from iam-edwin/main
[iam-edwin] WEEK 02 solutions
2 parents 215d994 + a8af320 commit 817b7c2

File tree

5 files changed

+171
-0
lines changed

5 files changed

+171
-0
lines changed

3sum/iam-edwin.java

+40
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import java.util.ArrayList;
2+
import java.util.HashMap;
3+
import java.util.HashSet;
4+
import java.util.List;
5+
import java.util.Map;
6+
import java.util.Set;
7+
8+
class Solution {
9+
public List<List<Integer>> threeSum(int[] nums) {
10+
List<List<Integer>> result = new ArrayList<>();
11+
12+
Map<Integer, Integer> counter = new HashMap<>();
13+
for (int num : nums) {
14+
int count = counter.getOrDefault(num, 0);
15+
counter.put(num, count + 1);
16+
}
17+
18+
Set<Integer> keySet = new HashSet<>(counter.keySet());
19+
for (int num1 : keySet) {
20+
int num1Count = counter.get(num1);
21+
if (num1Count > 1) {
22+
counter.put(num1, num1Count - 1);
23+
} else {
24+
counter.remove(num1);
25+
}
26+
27+
for (int num2 : counter.keySet()) {
28+
int num3 = -num1 - num2;
29+
int count = counter.getOrDefault(num3, 0);
30+
if (((num2 == num3 && count >= 2) || (num2 != num3 && count >= 1)) && num3 >= num2) {
31+
result.add(List.of(num1, num2, num3));
32+
}
33+
}
34+
35+
counter.remove(num1);
36+
}
37+
38+
return result;
39+
}
40+
}

climbing-stairs/iam-edwin.java

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
class Solution {
2+
public int climbStairs(int n) {
3+
int[] result = new int[n + 1];
4+
result[0] = 1;
5+
result[1] = 1;
6+
7+
for (int i = 2; i < n + 1; i++) {
8+
result[i] = result[i - 1] + result[i - 2];
9+
}
10+
11+
return result[n];
12+
}
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
class Solution {
2+
public int[] productExceptSelf(int[] nums) {
3+
int[] left = new int[nums.length + 1];
4+
int[] right = new int[nums.length + 1];
5+
left[0] = 1;
6+
right[nums.length] = 1;
7+
8+
for (int i = 0; i < nums.length; i++) {
9+
left[i + 1] = left[i] * nums[i];
10+
right[nums.length - i - 1] = right[nums.length - i] * nums[nums.length - i - 1];
11+
}
12+
13+
int[] result = new int[nums.length];
14+
for (int i = 0; i < nums.length; i++) {
15+
result[i] = left[i] * right[i + 1];
16+
}
17+
return result;
18+
}
19+
20+
public int[] productExceptSelfV2(int[] nums) {
21+
int[] result = new int[nums.length];
22+
23+
int curr = 1;
24+
result[0] = curr;
25+
for (int i = 1; i < nums.length; i++) {
26+
curr *= nums[i - 1];
27+
result[i] = curr;
28+
}
29+
30+
curr = 1;
31+
result[nums.length - 1] *= curr;
32+
for (int i = nums.length - 2; i >= 0; i--) {
33+
curr *= nums[i + 1];
34+
result[i] *= curr;
35+
}
36+
37+
return result;
38+
}
39+
}

valid-anagram/iam-edwin.java

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import java.util.HashMap;
2+
import java.util.Map;
3+
4+
class Solution {
5+
public boolean isAnagram(String s, String t) {
6+
Map<Character, Integer> sMap = new HashMap<>();
7+
for (char c : s.toCharArray()) {
8+
Integer count = sMap.getOrDefault(c, 0);
9+
sMap.put(c, count + 1);
10+
}
11+
12+
Map<Character, Integer> tMap = new HashMap<>();
13+
for (char c : t.toCharArray()) {
14+
Integer count = tMap.getOrDefault(c, 0);
15+
tMap.put(c, count + 1);
16+
}
17+
18+
for (char key : sMap.keySet()) {
19+
if (!sMap.get(key).equals(tMap.get(key))) {
20+
return false;
21+
}
22+
tMap.remove(key);
23+
}
24+
25+
return tMap.isEmpty();
26+
}
27+
}
+52
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
class Solution {
2+
public boolean isValidBST(TreeNode root) {
3+
return (root.left == null || isValidBSTMax(root.left, root.val))
4+
&& (root.right == null || isValidBSTMin(root.right, root.val));
5+
}
6+
7+
private boolean isValidBSTMax(TreeNode root, int max) {
8+
if (root.val >= max) {
9+
return false;
10+
}
11+
12+
return (root.left == null || isValidBSTMax(root.left, root.val))
13+
&& (root.right == null || isValidBSTMinMax(root.right, root.val, max));
14+
}
15+
16+
private boolean isValidBSTMin(TreeNode root, int min) {
17+
if (root.val <= min) {
18+
return false;
19+
}
20+
21+
return (root.left == null || isValidBSTMinMax(root.left, min, root.val))
22+
&& (root.right == null || isValidBSTMin(root.right, root.val));
23+
}
24+
25+
private boolean isValidBSTMinMax(TreeNode root, int min, int max) {
26+
if (root.val >= max || root.val <= min) {
27+
return false;
28+
}
29+
30+
return (root.left == null || isValidBSTMinMax(root.left, min, root.val))
31+
&& (root.right == null || isValidBSTMinMax(root.right, root.val, max));
32+
}
33+
34+
public class TreeNode {
35+
int val;
36+
TreeNode left;
37+
TreeNode right;
38+
39+
TreeNode() {
40+
}
41+
42+
TreeNode(int val) {
43+
this.val = val;
44+
}
45+
46+
TreeNode(int val, TreeNode left, TreeNode right) {
47+
this.val = val;
48+
this.left = left;
49+
this.right = right;
50+
}
51+
}
52+
}

0 commit comments

Comments
 (0)