给定一个数组,返回不重复三元组和为0
故此,我们不能使用三重循环,因为最差的情况是一个数组里面的元素都一样
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
int len=nums.size();
sort(nums.begin(),nums.end());//数组升序排列
vector<vector<int>> ans;
for(int i=0;i<len;i++){
if(i>0&&nums[i]==nums[i-1]){//判断不重复使用同一个数字,如果重复调到下一个循环
continue;
}
int target=-nums[i];
int k=len-1;
for(int j=i+1;j<len;+j++) {
if(j>i+1&&nums[j]==nums[j-1]){//判断不重复使用同一个数字,如果重复调到下一个循环
continue;
}
while(j<k&&nums[j]+nums[k]>target){
k--;
}
if(nums[j]+nums[k]==target&&j!=k){//判断不重复使用同一个数字
ans.push_back({nums[i],nums[j],nums[k]});
}
}
}
return ans;
}
};