Skip to content

Commit cd317ff

Browse files
authored
Merge pull request #2025 from ys-han00/main
[ys-han00] WEEK 02 solutions
2 parents c59a6ba + 0a07a70 commit cd317ff

File tree

5 files changed

+280
-0
lines changed

5 files changed

+280
-0
lines changed

3sum/ys-han00.cpp

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
// class Solution {
2+
// public:
3+
// vector<vector<int>> threeSum(vector<int>& nums) {
4+
// set<vector<int>> ans;
5+
// map<int, int> counter; // {num : cnt}
6+
// vector<int> targets;
7+
// int target, left, right;
8+
9+
// for(int i = 0; i < nums.size(); i++)
10+
// counter[nums[i]]++;
11+
12+
// for(auto iter : counter)
13+
// targets.push_back(iter.first);
14+
15+
// for(int i = 0; i < targets.size(); i++) {
16+
// target = -1 * targets[i];
17+
18+
// vector<int> new_nums;
19+
// counter[targets[i]]--;
20+
// for(auto iter : counter) {
21+
// for(int j = 0; j < iter.second; j++)
22+
// new_nums.push_back(iter.first);
23+
// }
24+
// left = 0; right = new_nums.size() - 1;
25+
// while(left < right) {
26+
// int sum = new_nums[left] + new_nums[right];
27+
// if(sum == target && targets[i] <= new_nums[left] && new_nums[left] <= new_nums[right])
28+
// ans.insert(vector<int>({targets[i], new_nums[left], new_nums[right]}));
29+
30+
// if(sum < target)
31+
// left++;
32+
// else
33+
// right--;
34+
// }
35+
// counter[targets[i]]++;
36+
// }
37+
38+
// return vector<vector<int>> (ans.begin(), ans.end());
39+
// }
40+
// };
41+
42+
class Solution {
43+
public:
44+
vector<vector<int>> threeSum(vector<int>& nums) {
45+
vector<vector<int>> ans;
46+
int left, right, sum;
47+
48+
sort(nums.begin(), nums.end());
49+
50+
for(int i = 0; i < nums.size(); i++) {
51+
if(i > 0 && nums[i] == nums[i - 1])
52+
continue;
53+
54+
left = i + 1; right = nums.size() - 1;
55+
while(left < right) {
56+
sum = nums[i] + nums[left] + nums[right];
57+
if(sum == 0) {
58+
ans.push_back(vector<int> ({nums[i], nums[left], nums[right]}));
59+
left++; right--;
60+
while(left < right && nums[left] == nums[left - 1])
61+
left++;
62+
while(left < right && nums[right] == nums[right + 1])
63+
right--;
64+
}
65+
else if(sum < 0)
66+
left++;
67+
else if(sum > 0)
68+
right--;
69+
}
70+
}
71+
72+
return ans;
73+
}
74+
};
75+

climbing-stairs/ys-han00.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public:
3+
int climbStairs(int n) {
4+
vector<int> fibo(46, 0);
5+
6+
fibo[1] = 1;
7+
fibo[2] = 2;
8+
9+
if(n <= 2)
10+
return fibo[n];
11+
12+
for(int i = 3; i <= n; i++)
13+
fibo[i] = fibo[i - 1] + fibo[i - 2];
14+
15+
return fibo[n];
16+
}
17+
};
18+
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
// class Solution {
2+
// public:
3+
// vector<int> productExceptSelf(vector<int>& nums) {
4+
// int mul = 1, zero_cnt = 0;
5+
6+
// for(int i = 0; i < nums.size(); i++) {
7+
// if(nums[i] != 0)
8+
// mul *= nums[i];
9+
// else
10+
// zero_cnt++;
11+
// }
12+
13+
// vector<int> ans = vector<int>(nums.size(), 0);
14+
15+
// if(zero_cnt == 1) {
16+
// for(int i = 0; i < nums.size(); i++) {
17+
// if(nums[i] == 0) {
18+
// ans[i] = mul;
19+
// break;
20+
// }
21+
// }
22+
// } else if(zero_cnt == 0) {
23+
// for(int i = 0; i < nums.size(); i++)
24+
// ans[i] = mul / nums[i];
25+
// }
26+
27+
// return ans;
28+
// }
29+
// };
30+
31+
// class Solution {
32+
// public:
33+
// vector<int> productExceptSelf(vector<int>& nums) {
34+
// int mul = 1, zero_cnt = 0;
35+
// vector<int> prefix(nums.size(), 0), postfix(nums.size(), 0);
36+
37+
// prefix[0] = 1;
38+
// for(int i = 1; i < nums.size(); i++)
39+
// prefix[i] = nums[i - 1] * prefix[i - 1];
40+
41+
// postfix[nums.size() - 1] = 1;
42+
// for(int i = nums.size() - 2; i >= 0; i--)
43+
// postfix[i] = nums[i + 1] * postfix[i + 1];
44+
45+
// vector<int> ans = vector<int>(nums.size(), 0);
46+
// for(int i = 0; i < nums.size(); i++)
47+
// ans[i] = postfix[i] * prefix[i];
48+
49+
// return ans;
50+
// }
51+
// };
52+
53+
class Solution {
54+
public:
55+
vector<int> productExceptSelf(vector<int>& nums) {
56+
vector<int> ans(nums.size(), 1);
57+
int before = 1, after = 1;
58+
59+
for(int i = 0; i < nums.size() - 1; i++) {
60+
before *= nums[i];
61+
ans[i + 1] *= before;
62+
}
63+
64+
for(int i = nums.size() - 1; i > 0; i--) {
65+
after *= nums[i];
66+
ans[i - 1] *= after;
67+
}
68+
69+
return ans;
70+
}
71+
};
72+

valid-anagram/ys-han00.cpp

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
// class Solution {
2+
// public:
3+
// bool isAnagram(string s, string t) {
4+
// map<char, int> counter;
5+
6+
// for(int i = 0; i < s.size(); i++)
7+
// counter[s[i] - 'a']++;
8+
// for(int i = 0; i < t.size(); i++)
9+
// counter[t[i] - 'a']--;
10+
11+
// for(auto const& iter : counter)
12+
// if(iter.second != 0)
13+
// return false;
14+
15+
// return true;
16+
// }
17+
// };
18+
19+
class Solution {
20+
public:
21+
bool isAnagram(string s, string t) {
22+
vector<int> counter(26, 0);
23+
24+
for(int i = 0; i < s.size(); i++)
25+
counter[s[i] - 'a']++;
26+
for(int i = 0; i < t.size(); i++)
27+
counter[t[i] - 'a']--;
28+
29+
for(int i = 0; i < 26; i++)
30+
if(counter[i] != 0)
31+
return false;
32+
33+
return true;
34+
}
35+
};
36+
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
8+
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
9+
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
10+
* };
11+
*/
12+
13+
// class Solution {
14+
// public:
15+
// bool isValidBST(TreeNode* root) {
16+
// queue<pair<TreeNode*, vector<pair<int, int>>>> que;
17+
// int val, dir, num;
18+
19+
// que.push({root, vector<pair<int, int>> ()});
20+
// while(!que.empty()) {
21+
// TreeNode* node = que.front().first;
22+
// vector<pair<int, int>> path = que.front().second;
23+
// que.pop();
24+
25+
// val = node->val;
26+
27+
// for(int i = 0; i < path.size(); i++) {
28+
// num = path[i].first;
29+
// dir = path[i].second;
30+
// if(dir == 0 && num <= val)
31+
// return false;
32+
// if(dir == 1 && val <= num)
33+
// return false;
34+
// }
35+
36+
// if(!node->left && !node->right)
37+
// continue;
38+
39+
// if(node->left) {
40+
// path.push_back({val, 0});
41+
// que.push({node->left, path});
42+
// path.pop_back();
43+
// }
44+
45+
// if(node->right) {
46+
// path.push_back({val, 1});
47+
// que.push({node->right, path});
48+
// path.pop_back();
49+
// }
50+
// }
51+
52+
// return true;
53+
// }
54+
// };
55+
56+
class Solution {
57+
public:
58+
void inorder(TreeNode* root, vector<int>& ordered) {
59+
if(root==NULL)
60+
return;
61+
62+
inorder(root->left, ordered);
63+
ordered.push_back(root->val);
64+
inorder(root->right, ordered);
65+
}
66+
67+
bool isValidBST(TreeNode* root) {
68+
vector<int> ordered;
69+
70+
inorder(root, ordered);
71+
72+
for(int i = 1; i < ordered.size(); i++)
73+
if(ordered[i - 1] >= ordered[i])
74+
return false;
75+
76+
return true;
77+
}
78+
};
79+

0 commit comments

Comments
 (0)