Skip to content

Commit 93fe432

Browse files
authored
Merge pull request #389 from kim-young/main
[kimyoung] WEEK 03 Solutions
2 parents 320f246 + e5d46b2 commit 93fe432

File tree

5 files changed

+97
-0
lines changed

5 files changed

+97
-0
lines changed

climbing-stairs/kimyoung.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// found a pattern where the result is the addition of two previous elements,
2+
// but not sure if this is the expected answer
3+
var climbStairs = function (n) {
4+
let arr = new Array(n).fill(1);
5+
for (let i = 2; i <= n; i++) {
6+
arr[i] = arr[i - 2] + arr[i - 1];
7+
}
8+
return n === 1 ? 1 : arr[n];
9+
};
10+
11+
// time - O(n) iterate up to n times
12+
// space - O(n) creates an array upto n elements

coin-change/kimyoung.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
var coinChange = function (coins, amount) {
2+
// create a dp array that stores the minimum amount of coins used for each amount leading up to the target amount
3+
// fill with array with amount + 1 as a default
4+
const dp = [0, ...new Array(amount).fill(amount + 1)];
5+
6+
// loop through the coins
7+
for (const coin of coins) {
8+
// for each amount, assess how the current coin can modify the existing value within the dp array by comparing the min value
9+
for (let i = 1; i <= amount; i++) {
10+
// only works if coin is less than or equal to the assessing amount
11+
if (coin <= i) {
12+
// min comparison
13+
dp[i] = Math.min(dp[i], dp[i - coin] + 1);
14+
}
15+
}
16+
}
17+
// check target amount in dp array to see if it's the default value
18+
// if it's default value, it means coin combination cannot lead up to target amount
19+
// if it's not default value, that is the minimum required coin change to lead up to target amount
20+
return dp[amount] === amount + 1 ? -1 : dp[amount];
21+
};
22+
23+
// time - O(a * c) loops through amount * loops through coin
24+
// space - O(a) depends on the size of amount

combination-sum/kimyoung.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
var combinationSum = function (candidates, target) {
2+
let results = [];
3+
4+
function helper(idx, curr, total) {
5+
// base case - when total = target push into results
6+
if (total === target) {
7+
results.push([...curr]);
8+
return;
9+
}
10+
// base exit case - when the index is greater or equal to candidates or the total is greater than target, exit
11+
if (idx >= candidates.length || total > target) {
12+
return;
13+
}
14+
15+
// recursive case
16+
// case where we include the current value without advancing the index
17+
curr.push(candidates[idx]);
18+
helper(idx, curr, total + candidates[idx]);
19+
curr.pop()
20+
// case where we advance the index
21+
helper(idx + 1, curr, total);
22+
}
23+
helper(0, [], 0);
24+
25+
return results;
26+
};
27+
28+
// time - O(2^n) backtracking
29+
// space - O(1)
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
var productExceptSelf = function (nums) {
2+
let result = new Array(nums.length).fill(0); // create a result array of length num
3+
let pre = 1, post = 1; // default to 1
4+
5+
for (let i = 0; i < nums.length; i++) { // fill the result array with prefix (multiplication of left values)
6+
result[i] = pre;
7+
pre *= nums[i];
8+
}
9+
for (let i = nums.length - 1; i >= 0; i--) { // multiply the postfix (multiplication of right values) to the result array in their corresponding index
10+
result[i] *= post;
11+
post *= nums[i];
12+
}
13+
14+
return result;
15+
};
16+
17+
// time - O(n) iterate through the nums array twice - 2n, remove constant which ends up to be n
18+
// space - O(1) result array not part of space complexity

two-sum/kimyoung.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
var twoSum = function (nums, target) {
2+
let map = new Map(); // create a map to store the number and index of each element
3+
for(let i = 0; i < nums.length; i++) {
4+
let diff = target - nums[i];
5+
if(map.has(diff)) { // once the differnece is found, return both index
6+
return [i, map.get(diff)];
7+
} else { // otherwise add to map
8+
map.set(nums[i], i)
9+
}
10+
}
11+
};
12+
13+
// time - O(n) at worst, iterate through the entire nums array
14+
// space - O(n) at worst, map the entire nums array

0 commit comments

Comments
 (0)