LeetCode-15-3sum
一、题目描述
给定一个int类型的数组,找出其中的3个元素a,b,c,使a+b+c=0。找出所有的这样的三元组
exapmle:
给定数组:S = [-1, 0, 1, 2, -1, -4]
返回值:
[
[-1, 0, 1],
[-1, -1, 2]
]
二、题目解答
先进行排序,然后确定第一个数的位置,剩下两个位置采用两边逼近的方式。
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> result;
sort(nums.begin(), nums.end());
int i = 0;
int last = nums.size() - 1;
while (i < last) {
int a = nums[i];
int j = i + 1;
int k = last;
while (j < k) {
int b = nums[j];
int c = nums[k];
int sum = a + b + c;
if (sum == 0)
result.push_back({a,b,c});
if (sum <= 0)
while (nums[j] == b && j < k)
j++;
if (sum >= 0)
while (nums[k] == c && j < k)
k--;
}
while (nums[i] == a && i < last)
i++;
}
return result;
}