题目链接:https://leetcode-cn.com/problems/3sum/description/
给定一个包含 n 个整数的数组
nums
,判断nums
中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4], 满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]
我的思路是先将数组排序。
因为如果三个数中不存在0,那么一定有一个数小于0,一个数大于0。用 i 来遍历数组,当遇到nums[i] > 0就break,因为不可能三个数都大于0。其次要排序重复元素,时间复杂度O(n2)
C++ 代码:
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int> > ar;
int i,left,right;
int len = nums.size();
sort(nums.begin(), nums.end());
for (i = 0;i < len -2;i++)
{
if (nums[i] > 0)
break;
if (i > 0 && nums[i - 1] == nums[i])
continue;
left = i + 1;
right = len - 1;
while (left < right)
{
if (nums[i] + nums[left] + nums[right] == 0) {
ar.push_back({nums[i], nums[left], nums[right]});
left++;
while (left < right && nums[left] == nums[left -1]) left++;
right--;
while (left < right && nums[right] == nums[right +1]) right--;
}
else if (nums[i] + nums[left] + nums[right] < 0) {
left++;
}
else {
right--;
}
}
}
return ar;
}
};
谢谢。