Skip to content

Commit 8a53dae

Browse files
authored
[jaekwang97] WEEK 02 Solutions (#2691)
* week 02 initial solutions * product of array except self solution * Add week 02 tree and three sum solutions * Improve climbing stairs space usage
1 parent e89acb1 commit 8a53dae

5 files changed

Lines changed: 124 additions & 0 deletions

File tree

3sum/jaekwang97.java

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
public List<List<Integer>> threeSum(int[] nums) {
5+
int n = nums.length;
6+
Arrays.sort(nums);
7+
List<List<Integer>> answers = new ArrayList<>();
8+
Set<List<Integer>> answer = new HashSet<>();
9+
for(int i = 0 ; i < n ; i++){
10+
if (nums[i] > 0) break;
11+
if (i > 0 && nums[i] == nums[i-1]) continue;
12+
int left = i + 1;
13+
int right = n - 1;
14+
while(left < right){
15+
int sum = nums[left] + nums[right] + nums[i];
16+
17+
18+
if (sum > 0) right--;
19+
else if (sum < 0) left++;
20+
else{
21+
answer.add(new ArrayList<>(List.of(nums[i],nums[left], nums[right])));
22+
while(left < right && nums[left] == nums[left+1]) left++;
23+
while(left < right && nums[right] == nums[right-1]) right--;
24+
left++;
25+
right--;
26+
}
27+
}
28+
}
29+
30+
answers = new ArrayList<>(answer);
31+
32+
return answers;
33+
}
34+
}

climbing-stairs/jaekwang97.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public int climbStairs(int n) {
3+
if (n <= 2) return n;
4+
5+
int prev = 1;
6+
int cur = 2;
7+
8+
for (int i = 3; i <= n; i++) {
9+
int next = prev + cur;
10+
prev = cur;
11+
cur = next;
12+
}
13+
14+
return cur;
15+
}
16+
}
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
public int[] productExceptSelf(int[] nums) {
5+
int n = nums.length;
6+
int[] right = new int[n + 1];
7+
int[] left = new int[n + 1];
8+
9+
right[0] = 1;
10+
for (int i = 1; i <= n; i++) {
11+
right[i] = right[i - 1] * nums[i - 1];
12+
}
13+
14+
left[n] = 1;
15+
for (int i = n - 1; i >= 0; i--) {
16+
left[i] = left[i + 1] * nums[i];
17+
}
18+
19+
int[] answer = new int[n];
20+
for (int i = 0; i < n; i++) {
21+
answer[i] = right[i] * left[i + 1];
22+
}
23+
24+
return answer;
25+
}
26+
}

valid-anagram/jaekwang97.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import java.util.*;
2+
3+
class Solution {
4+
public boolean isAnagram(String s, String t) {
5+
int[] count = new int[26];
6+
7+
for (char c : s.toCharArray()) {
8+
count[c - 'a']++;
9+
}
10+
11+
for (char c : t.toCharArray()) {
12+
count[c - 'a']--;
13+
}
14+
15+
for (int n : count) {
16+
if (n != 0) return false;
17+
}
18+
19+
return true;
20+
}
21+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* public class TreeNode {
4+
* int val;
5+
* TreeNode left;
6+
* TreeNode right;
7+
* TreeNode() {}
8+
* TreeNode(int val) { this.val = val; }
9+
* TreeNode(int val, TreeNode left, TreeNode right) {
10+
* this.val = val;
11+
* this.left = left;
12+
* this.right = right;
13+
* }
14+
* }
15+
*/
16+
class Solution {
17+
public boolean isValidBST(TreeNode root) {
18+
return dfs(root, Long.MIN_VALUE, Long.MAX_VALUE);
19+
}
20+
21+
private boolean dfs(TreeNode node, long min, long max){
22+
if(node == null) return true;
23+
if(node.val <= min || node.val >= max) return false;
24+
25+
return dfs(node.left, min, node.val) && dfs(node.right, node.val, max);
26+
}
27+
}

0 commit comments

Comments
 (0)