Leet Code OJ 15. 3Sum [Difficulty: Medium]
这题难的地方在于:
1.用什么存储结果:vector
2.怎么排除重复结果:先进行预处理:排序,排序后的结果对于比较重复元素以及结果大于或者小于0都有很大帮助
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> v;
sort(nums.begin(),nums.end());
int len=nums.size();
for(int i=0;i<len-2;i++){
//从第2位开始比较其与前一位是否相同,相同则表明再次使用此数有可能出现重复的结果,因此不进入循环再次i++
if(i==0 || (i>0 && nums[i] != nums[i-1])){
int j=i+1;
int k=len-1;
while(j<k){
int sum=nums[i]+nums[j]+nums[k];
if(sum == 0){
v.push_back(vector<int>{nums[i],nums[j],nums[k]});
while(j<k && nums[j] == nums[j+1]) j++;//使用while循环来像i一样排除重复结果
while(j<k && nums[k] == nums[k-1]) k--;
j++;
}
else if(sum<0){//由于之前进行排序,因此结果小于0j要往后走,大于0则k要往前走
j++;
}
else{
k--;
}
}
}
}
return v;
}
};