【剑指offer】三数之和

  |   0 评论   |   0 浏览

题目

给你一个包含 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左右移动由三数之和判断。


标题:【剑指offer】三数之和
作者:limanting
地址:https://blog.manxiaozhi.com/articles/2021/10/02/1633181468270.html