class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
//1.先对nums进行排序
int n = nums.size();
sort(nums.begin(),nums.end());
vector<vector<int>> vvi;
//2.降低复杂度,双指针
for(int i = 0;i<n;++i){
//跳过相同的值
if(i>0 && nums[i] == nums[i-1]){
continue;
}
int st = i+1;
int ed = n - 1;
for(;st<n;++st){
//跳过相同的值
if(st>i+1 && nums[st] == nums[st-1]){
continue;
}
//变动ed指针
while(st<ed&&nums[i]+nums[st]+nums[ed]>0){
--ed;
}
//相同的时候跳出
if(st == ed){
break;
}
if(nums[i]+nums[st]+nums[ed]==0){
vvi.push_back({nums[i],nums[st],nums[ed]});
}
}
}
return vvi;
}
};
剑指 Offer II 007. 数组中和为 0 的三个数
最新推荐文章于 2024-07-21 11:20:00 发布