leetcode-三数之和

35 阅读1分钟

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var threeSum = function(nums) {
    //先创建一个空的盒子,把后面的结果放进去
    let res = []
    //给数组排个序
    let sorted_nums = nums.sort()
    //遍历循环,设三个数的位置分别为i,j,k
    //确认第一个数i
    for(i = 0; i < sorted_nums.length - 1; i++){
        
        //第一个数字确定之后采用双指针的方法
        let j = i + 1
        let k = sorted_nums.length - 1
        sum = sorted_nums[i] + sorted_nums[j] + sorted_nums[k]
        while(j < k){
            if(sum < 0){
                
                j++
            } else if (sum > 0){
                
                k--
            } else {
                res.push([nums[i], nums[j++], nums[k--]])
                
                //跳过重复的
                while(sorted_nums[j] === sorted_nums[j-1]){
                    j++
                }
                
                while(nums[k] === nums[k+1]){
                    k--
                }
            }

        }

    }
    return res

};