Skip to content

Commit 8bc800e

Browse files
committed
#241 & #251 solutions
1 parent c2a68fc commit 8bc800e

File tree

2 files changed

+154
-0
lines changed

2 files changed

+154
-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+
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)