lettcode 15 三数之和

15. 三数之和

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。
例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],

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

超出时间限制
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var threeSum = function(nums) { 
    nums = nums.sort(function(a,b){return a-b}); 
    let len = nums.length; 
    let temp = []; 
    let result = [];
    let a; 
    for(let i =0;i<len;i++){ 
        for(let j =i+1;j<len;j++){ 
            for(let k =j+1;k<len;k++){ 
                if(nums[i]+nums[j]+nums[k] === 0){ 
                    a = nums[i] +','+ nums[j] +','+ nums[k];
                    temp.push(a); 
                } 
            } 
        }
                
    } 
    temp = [... new Set(temp)]; 
    for(let i=0;i<temp.length;i++){ 
        result[i] =temp[i].split(','); 
                                                          
    }

   return result; 
};

以下为通过代码

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var threeSum = function(nums) {
    let len = nums.length;
    let arr = [];
    nums.sort(function(a, b) {
        return a - b
    })
    for(let i = 0; i < len; i++) {
        if(i > 0 && nums[i] === nums[i - 1]) {
            continue;
        }
        let a = nums[i],
            l = i + 1,
            r = len - 1;
        while(l < r) {
            let b = nums[l],
                c = nums[r];
            let sum = a + b + c;
            if(sum === 0) {
                arr.push([a,b,c])
            } 
            if(sum <= 0) {
                while(nums[l] === b){
                    l++
                }
            } 
            if(sum >= 0){
                while(nums[r] === c){
                    r--
                }
            }
        }
    }
    return arr;
};

原文地址:https://www.cnblogs.com/joyce123/p/10782961.html