双指针。
先排序,然后固定一个数,用双指针从两端遍历得到其他两个数。注意去重复。
class Solution {
public:
vector<vector<int> > threeSum(vector<int> &num) {
vector<vector<int> > ans;
sort(num.begin(), num.end());
int len = num.size();
for(int i = 0; i < len; i++)
{
if (i != 0 && num[i] == num[i - 1])
continue;
int target = -num[i];
int left = i + 1, right = len - 1;
while(left < right)
{
if(num[left] + num[right] == target)
{
int temp[3] = {num[i], num[left], num[right]};
vector<int> vec(temp, temp + 3);
ans.push_back(vec);
while (left < right && num[left] == num[left + 1])
left++;
while (left < right && num[right] == num[right - 1])
right--;
left++;
right--;
}
else if(num[left] + num[right] < target)
left++;
else
right--;
}
}
return ans;
}
};


京公网安备 11010502036488号