讨论/题目交流/三数之和/
三数之和

给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。

注意:答案中不可以包含重复的三元组。

给定数组 nums = [-1, 0, 1, 2, -1, -4],

满足要求的三元组集合为:
[
  [-1, 0, 1],
  [-1, -1, 2]
]

var threeSum = function (nums) {
     let res = [];

    nums.sort((a, b) => a - b);

    if (nums.length >= 3) {
        
        for (let index = 0; index < nums.length - 1; index++) {
            let left = index + 1;
            let right = nums.length - 1;

            if (nums[index] === nums[index - 1]) {
                continue;
            }
            while (left < right) {
                let result = nums[index] + nums[left] + nums[right];
                
                if (result === 0) {
                    res.push([nums[left], nums[index], nums[right]]);
                    while(left < right && nums[left] === nums[left + 1]) { 
                        left++;
                    }
                    while(right > left && nums[right] === nums[right - 1]) { 
                        right--;
                    }
                    left++;
                    right--;
                } else if (result < 0) {
                    left++;
                } else if (result > 0) {
                    right--;
                }
            } 
        }
    }

    return res;
};
展开全部 4 讨论