思路:先排序,主要使用双指针的方式,进行元素的选择。
最重要的是需要使用while对重复元素的筛选。
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
//最接近的三个数
sort(nums.begin(), nums.end());
int len = nums.size();
vector<vector<int>> result;
vector<int > temp;
//两个指针first,last
for (int i = 0; i<len-1; ++i)
{
if (i == 0 || nums[i] != nums[i - 1])
{
int first = i + 1, last = len - 1;
while (first <last)
{
int s = nums[first] + nums[last];
if (s == -nums[i])
{
temp.push_back(nums[i]);
temp.push_back(nums[first]);
temp.push_back(nums[last]);
result.push_back(temp);
temp.clear();
++first;
--last;
while (first<last&&nums[first] == nums[first - 1])
{
++first;
}
while (first<last&&nums[last] == nums[last+1])
--last;
}
else if (s>-nums[i])
{
--last;
}
else
{
++first;
}
}
}
}
return result;
}
};