题解 | #牛牛的三元组问题#
牛牛的三元组问题
https://www.nowcoder.com/practice/72c6d735fb1144a2ba162976a4510839
class Solution {
public:
//三数之和
vector<vector<int> > findTriplets(vector<int>& nums) {
vector<vector<int>> ans;
sort(nums.begin(),nums.end());
for(int i = 0; i < nums.size();i++){
//剪枝
if(nums[i] > 0)break;
if(i > 0 && nums[i] == nums[i-1]) continue; //a去重
int left = i+1, right = nums.size()-1;
while(left < right){
//缩小区间
auto t = nums[i]+nums[left]+nums[right];
if(t > 0){
right--;
}else if(t < 0) left++;
else {
ans.push_back({nums[i],nums[left],nums[right]});
//下面进行b,c去重
while(left < right && nums[left] == nums[left+1]) left++;
while(left < right && nums[right] == nums[right-1]) right--;
right--,left++;
}
}
}
return ans;
}
};

安克创新 Anker公司福利 581人发布