Skip to content

Commit 996dd2f

Browse files
Merge branch 'DaleStudy:main' into main
2 parents 64ad68a + 855df9d commit 996dd2f

File tree

315 files changed

+9846
-79
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

315 files changed

+9846
-79
lines changed

โ€Ž3sum/haung921209.mdโ€Ž

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
```cpp
2+
class Solution {
3+
public:
4+
vector<vector<int>> threeSum(vector<int>& nums) {
5+
sort(nums.begin(), nums.end());
6+
set<vector<int>> res;
7+
for(int i=0;i<nums.size();i++){
8+
int l = i+1, r = nums.size()-1;
9+
10+
while(l<r){
11+
int sum = nums[i]+nums[l]+nums[r];
12+
13+
if(sum<0){
14+
l++;
15+
}else if(sum>0){
16+
r--;
17+
}else{
18+
res.insert({nums[i], nums[l], nums[r]});
19+
l++;
20+
r--;
21+
}
22+
}
23+
}
24+
25+
return vector<vector<int>>(res.begin(), res.end());
26+
}
27+
};
28+
```
29+
30+
- set -> vector ์‚ฌ์šฉ ์ด์œ ๋Š” ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ์œ„ํ•จ
31+
32+
```cpp
33+
class Solution {
34+
public:
35+
vector<vector<int>> threeSum(vector<int>& nums) {
36+
sort(nums.begin(), nums.end());
37+
set<vector<int>> res;
38+
for(int i=0;i<nums.size();i++){
39+
if(i != 0 && nums[i] == nums[i-1]) continue;
40+
41+
int l = i+1, r = nums.size()-1;
42+
43+
while(l<r){
44+
int sum = nums[i]+nums[l]+nums[r];
45+
46+
if(sum<0){
47+
l++;
48+
}else if(sum>0){
49+
r--;
50+
}else{
51+
res.insert({nums[i], nums[l], nums[r]});
52+
l++;
53+
r--;
54+
}
55+
}
56+
}
57+
58+
return vector<vector<int>>(res.begin(), res.end());
59+
60+
}
61+
};
62+
```
63+
64+
- `if(i != 0 && nums[i] == nums[i-1]) continue;` ๋ฅผ ํ†ตํ•œ ํƒ์ƒ‰ ๋ฒ”์œ„ ์ค„์ด๊ธฐ ์ตœ์ ํ™” ์ •๋„์˜ ์ฐจ์ด๋กœ ์ƒ / ํ•˜์œ„ ๊ฐˆ๋ฆฌ๋Š” ์ •๋„
65+
- ๋‹จ์ˆœ 2 pointer๋กœ ์ฒ˜๋ฆฌํ•ด๋„ ๋ฌด๋ฐฉ
66+
67+

โ€Žclimbing-stairs/RiaOh.jsโ€Ž

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
/**
2+
* @param {number} n
3+
* @return {number}
4+
*/
5+
var climbStairs = function (n) {
6+
const arr = [1, 2];
7+
for (let i = 2; i <= n - 1; i++) {
8+
arr[i] = arr[i - 2] + arr[i - 1];
9+
}
10+
return arr[n - 1];
11+
};
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// https://leetcode.com/problems/climbing-stairs/
2+
3+
// TC: O(N)
4+
// SC: O(N)
5+
6+
var climbStairs = function (n) {
7+
const stairs = [1, 2];
8+
9+
for (let i = 2; i < n; i++) {
10+
stairs[i] = stairs[i - 1] + stairs[i - 2];
11+
}
12+
13+
return stairs[n - 1];
14+
};
15+
16+
console.log(climbStairs(5));
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
/**
2+
* @param {number} n
3+
* @return {number}
4+
*/
5+
var climbStairs = function(n) {
6+
if (n === 1) return 1;
7+
if (n === 2) return 2;
8+
9+
let dp = new Array(n + 1).fill(0);
10+
dp[1] = 1;
11+
dp[2] = 2;
12+
for (let i = 3; i <= n; i++) {
13+
dp[i] = dp[i - 1] + dp[i - 2];
14+
}
15+
return dp[n];
16+
};
17+
18+
19+
console.log(climbStairs(4));
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
```cpp
2+
class Solution {
3+
public:
4+
int climbStairs(int n) {
5+
vector<int> dp = {0, 1, 2};
6+
dp.resize(n+1);
7+
for(int i=3;i<=n;i++){
8+
dp[i] = dp[i-1] + dp[i-2];
9+
}
10+
return dp[n];
11+
}
12+
};
13+
```
14+
- O(n)
15+
- dp
16+
17+
18+
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
/**
2+
* [Problem]: [322] Coin Change
3+
*
4+
* (https://leetcode.com/problems/coin-change/description/)
5+
*/
6+
function coinChange(coins: number[], amount: number): number {
7+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(c^a)
8+
// ๊ณต๊ฐ„๋ณต์žก๋„: O(a)
9+
// Time Exceed
10+
function dfsFunc(coins: number[], amount: number): number {
11+
if (!amount) return 0;
12+
let result = dfs(amount);
13+
14+
return result <= amount ? result : -1;
15+
16+
function dfs(remain: number): number {
17+
if (remain === 0) return 0;
18+
if (remain < 0) return amount + 1;
19+
20+
let min_count = amount + 1;
21+
22+
for (let coin of coins) {
23+
const result = dfs(remain - coin);
24+
min_count = Math.min(min_count, result + 1);
25+
}
26+
27+
return min_count;
28+
}
29+
}
30+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(ca)
31+
// ๊ณต๊ฐ„๋ณต์žก๋„: O(a)
32+
function dpFunc(coins: number[], amount: number): number {
33+
const dp = new Array(amount + 1).fill(amount + 1);
34+
dp[0] = 0;
35+
36+
for (let coin of coins) {
37+
for (let i = coin; i <= amount; i++) {
38+
dp[i] = Math.min(dp[i], dp[i - coin] + 1);
39+
}
40+
}
41+
42+
return dp[amount] <= amount ? dp[amount] : -1;
43+
}
44+
45+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(ca)
46+
// ๊ณต๊ฐ„๋ณต์žก๋„: O(a)
47+
function memoizationFunc(coins: number[], amount: number): number {
48+
const memo: Record<number, number> = {};
49+
50+
const result = dfs(amount);
51+
return result <= amount ? result : -1;
52+
53+
function dfs(remain: number): number {
54+
if (remain === 0) return 0;
55+
if (remain < 0) return amount + 1;
56+
if (remain in memo) return memo[remain];
57+
58+
let min_count = amount + 1;
59+
60+
for (let coin of coins) {
61+
const res = dfs(remain - coin);
62+
min_count = Math.min(min_count, res + 1);
63+
}
64+
65+
memo[remain] = min_count;
66+
67+
return min_count;
68+
}
69+
}
70+
71+
return memoizationFunc(coins, amount);
72+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
/*
3+
time complexity: O(amount ร— n)
4+
space complexity: O(amount)
5+
*/
6+
public int coinChange(int[] coins, int amount) {
7+
int[] memo = new int[amount + 1];
8+
Arrays.fill(memo, amount + 1); // ์ดˆ๊ธฐ๊ฐ’: ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ํฐ ์ˆ˜
9+
memo[0] = 0; // 0์›์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๋™์ „ ์ˆ˜๋Š” 0๊ฐœ
10+
11+
for (int coin : coins) {
12+
for (int i = coin; i <= amount; i++) {
13+
memo[i] = Math.min(memo[i], memo[i - coin] + 1);
14+
}
15+
}
16+
17+
return memo[amount] > amount ? -1 : memo[amount];
18+
}
19+
}

โ€Žcoin-change/Jeehay28.tsโ€Ž

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
// Approach 2: Dynamic Programming
2+
// // Time Complexity: O(amout * n), where n is the number of coins
3+
// // Space Complexity: O(amount)
4+
5+
function coinChange(coins: number[], amount: number): number {
6+
7+
// input: coins = [2, 3, 5], amount = 7
8+
9+
// initial state dp
10+
// 0: 0
11+
// 1: amount + 1 = 8
12+
// 2: 8
13+
// 3: 8
14+
// 4: 8
15+
// 5: 8
16+
// 6: 8
17+
// 7: 8
18+
19+
// using coin 2
20+
// 0: 0
21+
// 1: 8
22+
// 2: 8 -> 8 vs dp[2-2] + 1 = 1 -> 1
23+
// 3: 8 -> 8 vs dp[3-2] + 1 = 9 -> 8
24+
// 4: 8 -> 8 vs dp[4-2] + 1 = 2 -> 2
25+
// 5: 8 -> 8 vs dp[5-2] + 1 = 9 -> 8
26+
// 6: 8 -> 8 vs dp[6-2] + 1 = 3 -> 3
27+
// 7: 8 -> 8 vs dp[7-2] + 1 = 9 -> 8
28+
29+
const dp = Array.from({ length: amount + 1 }, () => amount + 1);
30+
dp[0] = 0
31+
32+
for (const coin of coins) {
33+
for (let currentTotal = coin; currentTotal <= amount; currentTotal++) {
34+
dp[currentTotal] = Math.min(dp[currentTotal - coin] + 1, dp[currentTotal])
35+
}
36+
}
37+
38+
return dp[amount] > amount ? -1 : dp[amount]
39+
};
40+
41+
42+
// // Approach 1: BFS Traversal
43+
// // Time Complexity: O(amout * n), where n is the number of coins
44+
// // Space Complexity: O(amount)
45+
46+
// function coinChange(coins: number[], amount: number): number {
47+
// // queue: [[number of coints, current total]]
48+
// let queue = [[0, 0]];
49+
// let visited = new Set();
50+
51+
// while (queue.length > 0) {
52+
// const [cnt, total] = queue.shift()!;
53+
54+
// if (total === amount) {
55+
// return cnt;
56+
// }
57+
58+
// if (visited.has(total)) {
59+
// continue;
60+
// }
61+
// visited.add(total);
62+
63+
// for (const coin of coins) {
64+
// if (total + coin <= amount) {
65+
// queue.push([cnt + 1, total + coin]);
66+
// }
67+
// }
68+
// }
69+
70+
// return -1;
71+
// }
72+

โ€Žcoin-change/PDKhan.cppโ€Ž

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public:
3+
int coinChange(vector<int>& coins, int amount) {
4+
vector<int> dp(amount+1, amount+1);
5+
6+
dp[0] = 0;
7+
8+
for(int i = 1; i <= amount; i++){
9+
for(int j = 0; j < coins.size(); j++){
10+
if(i >= coins[j])
11+
dp[i] = min(dp[i], 1 + dp[i - coins[j]]);
12+
}
13+
}
14+
15+
if(dp[amount] > amount)
16+
return -1;
17+
18+
return dp[amount];
19+
}
20+
};

โ€Žcoin-change/Tessa1217.javaโ€Ž

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
/**
2+
* ์ •์ˆ˜ ๋ฐฐ์—ด coins๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ amount๋ฅผ ๋งŒ๋“ค ๊ธฐ ์œ„ํ•ด ์ตœ์†Œํ•œ์˜ ๋™์ „ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜์„ธ์š”.
3+
๋งŒ์•ฝ ๋™์ ์œผ๋กœ amount ์กฐํ•ฉ์„ ๋งŒ๋“ค์–ด๋‚ผ ์ˆ˜ ์—†๋‹ค๋ฉด -1์„ ๋ฆฌํ„ดํ•˜์„ธ์š”.
4+
*/
5+
import java.util.Arrays;
6+
7+
class Solution {
8+
9+
// ์‹œ๊ฐ„๋ณต์žก๋„: O(n * amount), ๊ณต๊ฐ„๋ณต์žก๋„: O(amount)
10+
public int coinChange(int[] coins, int amount) {
11+
int[] coinCnt = new int[amount + 1];
12+
// coins[i]์˜ ์ตœ๋Œ“๊ฐ’์ด 2^31 - 1 ์ด๋ฏ€๋กœ ์ตœ๋Œ“๊ฐ’ ์„ค์ •
13+
Arrays.fill(coinCnt, Integer.MAX_VALUE - 1);
14+
coinCnt[0] = 0;
15+
for (int i = 0; i < coins.length; i++) {
16+
for (int j = coins[i]; j < amount + 1; j++) {
17+
coinCnt[j] = Math.min(coinCnt[j], coinCnt[j - coins[i]] + 1);
18+
}
19+
}
20+
if (coinCnt[amount] == Integer.MAX_VALUE - 1) {
21+
return -1;
22+
}
23+
return coinCnt[amount];
24+
}
25+
}
26+

0 commit comments

Comments
ย (0)