1- // Time: O(n^2)
2- // Space: O(1)
3-
41class Solution {
52public:
6- vector<vector<int >> threeSum (vector<int > &nums) {
7- sort (begin (nums), end (nums));
8- vector<vector<int >> result;
9- for (int i = size (nums) - 1 ; i >= 2 ; --i) {
10- if (i + 1 < size (nums) && nums[i] == nums[i + 1 ]) {
3+ vector<vector<int >> threeSum (vector<int >& nums) {
4+ vector<vector<int >>ans;
5+ vector<int > temp;
6+ sort (nums.begin (), nums.end ());
7+ if (nums.size ()<3 )
8+ return ans;
9+ int i,j,k;
10+ for (i=0 ;i<nums.size ()-2 ;i++){
11+ if (i!=0 && nums[i]==nums[i-1 ])
1112 continue ;
12- }
13- const auto & target = -nums[i];
14- int left = 0 , right = i - 1 ;
15- while (left < right) {
16- if (nums[left] + nums[right] < target) {
17- ++left;
18- } else if (nums[left] + nums[right] > target) {
19- --right;
20- } else {
21- result.push_back ({nums[left], nums[right], nums[i]});
22- ++left; --right;
23- while (left < right && nums[left] == nums[left - 1 ]) {
24- ++left;
25- }
26- while (left < right && nums[right] == nums[right + 1 ]) {
27- --right;
28- }
13+ j=i+1 ;
14+ k=nums.size ()-1 ;
15+
16+ while (j<k){
17+ if (-nums[i]==nums[j]+nums[k]){
18+ temp.clear ();
19+ temp.push_back (nums[i]);
20+ temp.push_back (nums[j]);
21+ temp.push_back (nums[k]);
22+ // if(find(ans.begin(),ans.end(),temp)==ans.end()){
23+ ans.push_back (temp);
24+ // cout<<"in if";
25+ // }
26+ while (j<k && nums[j]==nums[j+1 ])
27+ j++;
28+ j++;
29+
30+ k--;
2931 }
32+ else if (-nums[i]<nums[j]+nums[k])
33+ k--;
34+ else
35+ j++;
3036 }
3137 }
32- return result;
38+ return ans;
3339 }
34- };
40+ };
0 commit comments