【剑指offer】三数之和
题目
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
我的答案
/**
* @param {number[]} nums
* @return {number[][]}
*/
var threeSum = function (nums) {
if (nums.length < 3) {
return [];
}
nums.sort((a, b) => (a - b));
if (nums[0] > 0) { return [] };
const res = [];
for (let i = 0; i < nums.length;) {
let l = i + 1;
let r = nums.length - 1;
while (l < r) {
if (nums[i] + nums[l] + nums[r] === 0) {
res.push([nums[i], nums[l], nums[r]]);
const left=nums[l];
const right=nums[r];
while(nums[++l]===left);
while(nums[--r]===right);
}else if(nums[i] + nums[l] + nums[r]>0) {
r--;
}else {
l++;
}
}
const temp=nums[i];
while(nums[++i]===temp);
}
return res;
};
这道题目如果不想达到n^3 的复杂度的话,就需要先排序一遍,然后遍历每个num[i],查看是否存在num[l] 和num[r],是的三个值和为0,l和r左右移动由三数之和判断。