跳到主要内容

LCR007.三数之和

链接:LCR007.三数之和
难度:Medium
标签:数组、双指针、排序
简介:给定一个包含 n 个整数的数组  nums,判断  nums  中是否存在三个元素  a ,b ,c ,使得  a + b + c = 0 ?请找出所有和为 0 且   不重复   的三元组。

题解 1 - cpp

  • 编辑时间:2022-02-18
  • 执行用时:60ms
  • 内存消耗:19.3MB
  • 编程语言:cpp
  • 解法介绍:循环双指针。
class Solution {
public:
vector<vector<int>> threeSum(vector<int>& nums) {
vector<vector<int>> ans;
sort(nums.begin(), nums.end());
for (int i = 0; i < nums.size() && nums[i] <= 0; i++) {
if (i != 0 && nums[i] == nums[i - 1]) continue;
int sum, l = i + 1, r = nums.size() - 1;
while (l < r) {
sum = nums[l] + nums[r] + nums[i];
if (sum == 0) {
ans.push_back(vector<int>{nums[i], nums[l], nums[r]});
while (l < r && nums[l] == nums[l + 1]) l++;
l++;
} else if (sum > 0)
r--;
else
l++;
}
}
return ans;
}
};