Skip to content

Commit c5ed177

Browse files
authored
Merge pull request #2431 from soobing/week2
[soobing] Week 2 solutions
2 parents 85a306c + ea7dfb9 commit c5ed177

File tree

5 files changed

+105
-0
lines changed

5 files changed

+105
-0
lines changed

3sum/soobing3.ts

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
function threeSum(nums: number[]): number[][] {
2+
const result: number[][] = []
3+
4+
nums.sort((a: number, b: number) => a-b);
5+
for(let i = 0; i<nums.length; i++) {
6+
if (i > 0 && nums[i] === nums[i - 1]) continue;
7+
let left = i + 1;
8+
let right = nums.length - 1;
9+
10+
while(left < right) {
11+
const sum = nums[i] + nums[left] + nums[right];
12+
if(sum === 0) {
13+
result.push([nums[i], nums[left], nums[right]])
14+
while (left < right && nums[left] === nums[left + 1]) left++;
15+
while (left < right && nums[right] === nums[right - 1]) right--;
16+
17+
left++;
18+
right--;
19+
} else if(sum < 0) {
20+
left++;
21+
} else {
22+
right--;
23+
}
24+
}
25+
}
26+
return result;
27+
};

climbing-stairs/soobing3.ts

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

valid-anagram/soobing3.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
function isAnagram(s: string, t: string): boolean {
2+
if(s.length !== t.length) return false;
3+
4+
const sMap = new Map<string, number>();
5+
const tMap = new Map<string, number>();
6+
7+
for(const s_char of s) {
8+
sMap.set(s_char, (sMap.get(s_char) ?? 0) + 1);
9+
}
10+
11+
for(const t_char of t) {
12+
tMap.set(t_char, (tMap.get(t_char) ?? 0) + 1);
13+
}
14+
15+
if(sMap.size !== tMap.size) return false;
16+
for(const [sKey, sValue] of sMap) {
17+
if(sValue !== tMap.get(sKey)) return false;
18+
}
19+
return true
20+
};
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* class TreeNode {
4+
* val: number
5+
* left: TreeNode | null
6+
* right: TreeNode | null
7+
* constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
8+
* this.val = (val===undefined ? 0 : val)
9+
* this.left = (left===undefined ? null : left)
10+
* this.right = (right===undefined ? null : right)
11+
* }
12+
* }
13+
*/
14+
15+
function isValidBST(root: TreeNode | null): boolean {
16+
function validate(node: TreeNode | null, min: number, max: number){
17+
if(node === null) return true;
18+
19+
if(node.val <= min || node.val >= max) return false;
20+
21+
return validate(node.left, min, node.val) && validate(node.right, node.val, max)
22+
}
23+
return validate(root, -Infinity, Infinity);
24+
};

0 commit comments

Comments
 (0)