Skip to content

Commit 4aa9763

Browse files
authored
Merge pull request DaleStudy#2403 from junzero741/main
[junzero741] WEEK 02 solutions
2 parents 8548141 + 8276bc6 commit 4aa9763

5 files changed

Lines changed: 134 additions & 0 deletions

File tree

3sum/junzero741.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
// TC: O(n^2)
2+
// SC: O(logn)
3+
function threeSum(nums: number[]): number[][] {
4+
5+
nums.sort((a,b) => a-b);
6+
const result: number[][] = []
7+
8+
for(let i = 0 ; i < nums.length; i++) {
9+
let left = i+1;
10+
let right = nums.length-1;
11+
12+
while(left < right) {
13+
if(i > 0 && nums[i] === nums[i-1]) {
14+
break;
15+
}
16+
17+
const sum = nums[i] + nums[left] + nums[right];
18+
if(sum > 0) {
19+
right--;
20+
continue;
21+
}
22+
if(sum < 0) {
23+
left++;
24+
continue;
25+
}
26+
if(sum === 0) {
27+
const triplet: number[] = [nums[i], nums[left], nums[right]];
28+
result.push(triplet);
29+
30+
while(left < right && nums[left] === nums[left+1]) {
31+
left++;
32+
}
33+
while(left < right && nums[right] === nums[right-1]) {
34+
right--;
35+
}
36+
37+
left++;
38+
right--;
39+
}
40+
}
41+
42+
}
43+
44+
return result;
45+
};

climbing-stairs/junzero741.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
// TC: O(n)
2+
// SC: O(n)
3+
function climbStairs(n: number): number {
4+
if(n <= 3) {
5+
return n;
6+
}
7+
const memo = new Array(n+1);
8+
memo[1] = 1
9+
memo[2] = 2
10+
memo[3] = 3
11+
12+
for(let i = 4; i <= n; i++) {
13+
memo[i] = memo[i-1] + memo[i-2];
14+
}
15+
16+
return memo[n];
17+
};
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// TC: O(n)
2+
// SC: O(1)
3+
function productExceptSelf(nums: number[]): number[] {
4+
const answer = new Array(nums.length).fill(1);
5+
6+
let before = 1;
7+
for(let i = 0; i < nums.length-1; i++) {
8+
before *= nums[i];
9+
answer[i+1] *= before;
10+
}
11+
12+
before = 1;
13+
for(let i = nums.length-1; i > 0; i--) {
14+
before *= nums[i];
15+
answer[i-1] *= before;
16+
}
17+
18+
return answer;
19+
};

valid-anagram/junzero741.ts

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
// TC: O(n)
2+
// SC: O(n)
3+
function isAnagram(s: string, t: string): boolean {
4+
if(s.length !== t.length) {
5+
return false;
6+
}
7+
8+
const sMap = new Map<string, number>();
9+
const tMap = new Map<string, number>();
10+
11+
for(let i = 0; i < s.length; i++) { // TC: O(N), SC: O(N)
12+
const sChar = s[i];
13+
const tChar = t[i];
14+
const sCharCount = sMap.get(sChar) || 0;
15+
const tCharCount = tMap.get(tChar) || 0;
16+
17+
sMap.set(sChar, sCharCount + 1);
18+
tMap.set(tChar, tCharCount + 1);
19+
}
20+
21+
for(let i = 0; i < s.length; i++) { // TC: O(N), SC: O(1)
22+
const char = s[i];
23+
24+
if(sMap.get(char) !== tMap.get(char)) {
25+
return false;
26+
}
27+
}
28+
29+
return true;
30+
};
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
// TC: O(n)
2+
// SC: O(n)
3+
type TreeNode = {
4+
val: number
5+
left: TreeNode | null
6+
right: TreeNode | null
7+
}
8+
function isValidBST(root: TreeNode | null): boolean {
9+
10+
function dfs(node: TreeNode | null, low: number, high: number): boolean {
11+
if(!node) {
12+
return true;
13+
}
14+
15+
if(node.val <= low || node.val >= high) {
16+
return false;
17+
}
18+
19+
return dfs(node.left, low, node.val) && dfs(node.right, node.val, high)
20+
}
21+
22+
return dfs(root, -Infinity, Infinity);
23+
};

0 commit comments

Comments
 (0)