Skip to content

Commit 3033246

Browse files
authored
Merge pull request #2420 from hwi-middle/main
[hwi-middle] WEEK 02 solutions
2 parents 78828fa + 6fa0ef0 commit 3033246

5 files changed

Lines changed: 154 additions & 0 deletions

File tree

3sum/hwi-middle.cpp

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
class Solution {
2+
public:
3+
vector<vector<int>> threeSum(vector<int>& nums) {
4+
vector<vector<int>> res;
5+
6+
sort(nums.begin(), nums.end());
7+
8+
for (int i = 0; i < nums.size() && nums[i] <= 0; ++i)
9+
{
10+
if (i != 0 && nums[i - 1] == nums[i])
11+
{
12+
continue;
13+
}
14+
15+
int l = i + 1;
16+
int r = nums.size() - 1;
17+
while (l < r)
18+
{
19+
int sum = nums[i] + nums[l] + nums[r];
20+
if (sum < 0)
21+
{
22+
++l;
23+
}
24+
else if (sum > 0)
25+
{
26+
--r;
27+
}
28+
else
29+
{
30+
res.push_back({nums[i], nums[l++], nums[r--]});
31+
while (l < r && nums[l] == nums[l - 1])
32+
{
33+
++l;
34+
}
35+
}
36+
}
37+
}
38+
39+
return res;
40+
}
41+
};

climbing-stairs/hwi-middle.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
int climbStairs(int n) {
4+
int p = 1;
5+
int pp = 0;
6+
int cur = 0;
7+
for (int i = 0; i < n; ++i)
8+
{
9+
cur = p + pp;
10+
pp = p;
11+
p = cur;
12+
}
13+
14+
return cur;
15+
}
16+
};
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class Solution {
2+
public:
3+
vector<int> productExceptSelf(vector<int>& nums) {
4+
int n = nums.size();
5+
vector<int> ans(n);
6+
7+
ans[0] = 1;
8+
for (int i = 1; i < n; i++)
9+
{
10+
ans[i] = ans[i-1] * nums[i-1];
11+
}
12+
13+
int suffix = 1;
14+
for (int i = n-1; i >= 0; i--)
15+
{
16+
ans[i] *= suffix;
17+
suffix *= nums[i];
18+
}
19+
20+
return ans;
21+
}
22+
};

valid-anagram/hwi-middle.cpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
class Solution {
2+
public:
3+
bool isAnagram(string s, string t) {
4+
if (s.size() != t.size())
5+
{
6+
return false;
7+
}
8+
9+
int cnt_s[26];
10+
int cnt_t[26];
11+
12+
int len = s.size();
13+
for (int i = 0; i < len; ++i)
14+
{
15+
cnt_s[s[i] - 'a']++;
16+
cnt_t[t[i] - 'a']++;
17+
}
18+
19+
for (int i = 0; i < 26; ++i)
20+
{
21+
if(cnt_s[i] != cnt_t[i])
22+
{
23+
return false;
24+
}
25+
}
26+
27+
return true;
28+
}
29+
};
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
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+
class Solution {
13+
public:
14+
bool isValidBST(TreeNode* root) {
15+
vector<int> v;
16+
v.reserve(1e4);
17+
18+
solve(root, v);
19+
20+
int len = v.size();
21+
for (int i = 0; i < len - 1; ++i)
22+
{
23+
if (v[i] >= v[i + 1])
24+
{
25+
return false;
26+
}
27+
}
28+
29+
return true;
30+
}
31+
32+
void solve(TreeNode* root, vector<int>& v)
33+
{
34+
if (root->left != nullptr)
35+
{
36+
solve(root->left, v);
37+
}
38+
39+
v.push_back(root->val);
40+
41+
if (root->right != nullptr)
42+
{
43+
solve(root->right, v);
44+
}
45+
}
46+
};

0 commit comments

Comments
 (0)