Skip to content

Commit ded5a47

Browse files
authoredOct 18, 2018
Merge pull request doocs#27 from zhkmxx9302013/master
Add 015 cpp solution
2 parents 1c8b53e + a724140 commit ded5a47

File tree

1 file changed

+89
-0
lines changed

1 file changed

+89
-0
lines changed
 

‎solution/015.3Sum/solution.cpp

+89
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
class Solution {
2+
public:
3+
vector<vector<int> > threeSum(vector<int> &num) {
4+
return threeSumGen(num, 0);
5+
}
6+
7+
vector<vector<int> > threeSumGen(vector<int> &num, int target) {
8+
vector<vector<int>> allSol;
9+
if(num.size()<3) return allSol;
10+
sort(num.begin(),num.end());
11+
12+
for(int i=0; i<num.size()-2; i++) {
13+
if(i>0 && num[i]==num[i-1]) continue; // 去重
14+
15+
int left=i+1, right=num.size()-1;
16+
17+
while(left<right) {
18+
int curSum = num[left]+num[right];
19+
int curTarget = target-num[i];
20+
if(curSum==curTarget) {
21+
vector<int> sol;
22+
sol.push_back(num[i]);
23+
sol.push_back(num[left]);
24+
sol.push_back(num[right]);
25+
allSol.push_back(sol);
26+
left++;
27+
right--;
28+
while(num[left]==num[left-1]) left++;
29+
while(num[right]==num[right+1]) right--;
30+
}
31+
else if(curSum<curTarget)
32+
left++;
33+
else
34+
right--;
35+
}
36+
}
37+
return allSol;
38+
}
39+
40+
41+
42+
//backtrace TLE
43+
44+
// vector<vector<int>> threeSum(vector<int>& nums) {
45+
// sort(nums.begin(), nums.end());
46+
// if (nums.size() <= 2 || nums[0] > 0) return{};
47+
// set<vector<int>> res;
48+
// for (int i = 0; i < nums.size(); i++)
49+
// {
50+
// int target = 0 - nums[i];
51+
// int m = 0, n = nums.size() - 1;
52+
// while (m < n)
53+
// {
54+
// while (true)
55+
// {
56+
// if (m >= n) break;
57+
// if (m == i)
58+
// {
59+
// m++;
60+
// continue;
61+
// }
62+
// if (n == i)
63+
// {
64+
// n--;
65+
// continue;
66+
// }
67+
// if (nums[m] + nums[n] == target) {
68+
// vector<int> s = { nums[m++], nums[i], nums[n] };
69+
// sort(s.begin(), s.end());
70+
// res.insert(s);
71+
// break;
72+
// }
73+
// if (nums[m] + nums[n] > target) n--;
74+
// if (nums[m] + nums[n] < target) m++;
75+
// }
76+
// }
77+
78+
// }
79+
// vector<vector<int>> fres(res.begin(), res.end());
80+
// return fres;
81+
// }
82+
};
83+
84+
// accelerate the cin process.
85+
int x = []() {
86+
std::ios::sync_with_stdio(false);
87+
cin.tie(NULL);
88+
return 0;
89+
}();

0 commit comments

Comments
 (0)