題目描述:
給定一個包含 n 個整數的數組 nums
,判斷 nums
中是否存在三個元素 a,b,c ,使得 a + b + c = 0 ?找出所有滿足條件且不重複的三元組。
注意:答案中不可以包含重複的三元組。
例如, 給定數組 nums = [-1, 0, 1, 2, -1, -4], 滿足要求的三元組集合爲: [ [-1, 0, 1], [-1, -1, 2] ]
思路:
將問題轉化爲兩數之和的思路,首先排序數組,然後依次遍歷每個數據,當遍歷到當前的數的時候,就在剩下的數中找兩數之和等於0-當前數的值
代碼:
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int> > ret;
if(nums.size()<3)
return ret;
sort(nums.begin(), nums.end());
int temp_v=-1;
for(int i=0; i<nums.size(); i++)
{
if(i>0 && nums[i]==nums[i-1])
continue;
int start=i+1;
int end=nums.size()-1;
int target=-nums[i];
while(start<end){
if(nums[start] + nums[end] == target){
vector<int> temp={nums[i], nums[start], nums[end]};
ret.push_back(temp);
while(nums[start]==nums[++start]){}
while(nums[end]==nums[--end]){}
}
else if(nums[start] + nums[end] > target)
{
while(nums[end]==nums[--end]){}
}
else{
while(nums[start]==nums[++start]){}
}
}
}
return ret;
}
};