15. 3sum
题目描述
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/4824a391486a9f42a35e3b35cfaca4b2.png)
解题思路
- 看到这题,最直接的就是先排好序,之后首尾相加与首后面的以及尾前面的比较,但是做着做着只能通过10几个test,总共有几百个test,要考虑的很多,尤其是不能有重复结果出现,需要谨慎思考。。。
代码
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
sort(nums.begin(),nums.end()); //先排序
int size = nums.size();
int i = 0;
vector<vector<int>> result;
if(nums.size() < 3) return result; //小于3个的元素直接输出
for(i ;i < size - 2;i++)
{
if(nums[i] > 0) break;
if(i > 0 && nums[i] == nums[i - 1]) //为了避免重复的结果出现
continue;
int front = i + 1,back = size-1;
int target = -nums[i];
while(front < back){
if(nums[front]+nums[back] == target){
result.push_back(vector<int>({nums[i],nums[front++],nums[back--]}));
while(front < back && nums[front] == nums[front-1]) //为了避免重复的结果出现
front++;
while(front < back && nums[back] == nums[back+1])
back--;
}
else if(nums[front]+nums[back] < target)
{
front++;
}
else back--;
}
}
return result;
}};