15_3Sum - a920604a/leetcode GitHub Wiki
title: 15. 3Sum
從陣列中,找出所有三個元素總和為零。
- 先對原陣列進行排序
- 固定一個數
i
,再利用雙索引j
k
找出總和為0-target[i]
- 找到後加左索引
j
向右移一位,k
向左移一位。
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> ret;
int n=nums.size();
sort(nums.begin(), nums.end());
for(int i=0;i<n-2;++i){
// 確保不會重複
if(i>0 && nums[i] == nums[i-1]) continue;
int l = i+1, r = n-1;
int target = -nums[i];
while(l<r){
int sum = nums[l] + nums[r];
if(sum==target){
ret.push_back({nums[i], nums[l], nums[r]});
while(l<r && nums[l] == nums[l+1]) l++;
while(l<r && nums[r] == nums[r-1]) r--;
l++;
r--;
}
else if(sum<target) l++;
else r--;
}
}
return ret;
}
};
- time complexity
O(n^2)
- space complexity
O(1)