1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| class Solution { public: vector<vector<int>> threeSum(vector<int>& nums) { vector<vector<int>> ans; sort(nums.begin(),nums.end()); int n = nums.size(); for(int i = 0;i<n-2;i++){ if(i && nums[i]==nums[i-1])continue; if(nums[i]+nums[i+1]+nums[i+2]>0)break; if(nums[i]+nums[n-1]+nums[n-2]<0)continue; int j = i+1,k=n-1; while(j<k){ int s= nums[i]+nums[j]+nums[k]; if(s>0){ k--; } else if(s<0){ j++; } else{ ans.push_back({nums[i],nums[j],nums[k]}); for(j++;j<k&&nums[j]==nums[j-1];j++); for(k--;j<k&&nums[k]==nums[k+1];k--);
}
} } return ans; } };
|