题意:找出给定数组中包含三个元素,其和等于0且不重复的三元组
分析:先对数组进行排序,用三重循环(分别为a、b、c)来暴力破解时注意为了笔面重复一定要把相应层的指针指向
相同元素的最后一个。进一步的改进,可以在第三重循环时利用三数和为0进行改进,可以发现,第二重指针从小到达,
而第三重指针从大到小,为了避免重复还应该将b<=c加入条件中
注意:三元组不重复
*/
vector<vector<int>> threeSum(vector<int>& nums){
vector<vector<int> > ans;
int n = nums.size();sort(nums.begin(), nums.end());
for (int a = 0; a < n; ++a){
if (a > 0 && nums[a] == nums[a - 1]) continue;
int sum = -nums[a];
int c = n - 1;
for (int b = a + 1; b < n; ++b){
if (b > a + 1 && nums[b] == nums[b - 1]) continue;
while (b < c&&nums[b] + nums[c] > sum) c--;
if (b == c) break;//说明在b后面的c都不满足条件,故这个第二重循环可以跳出
if (nums[b] + nums[c] == sum) ans.push_back({ nums[a],nums[b],nums[c] });}}
return ans;}