【Javascript】leetcode 15. 3Sum

Given an array nums of n integers, are there elements abc in nums such that a + b + c = 0? Find all unique triplets in the array which gives the sum of zero.

Note:

The solution set must not contain duplicate triplets.

Example:

Given array nums = [-1, 0, 1, 2, -1, -4],

A solution set is:
[
  [-1, 0, 1],
  [-1, -1, 2]
]

 思路:

参考

先排序, 然后now指针从头开始遍历,取lo=now+1,hi=len-1:

  如果nums[lo] + nums[hi] == -1*nums[now] 说明这组ok,加入结果数组里。然后lo++,hi--继续判断(要跳过重复),直到hi<lo

  如果nums[lo] + nums[hi] < -1*nums[now]:lo++

  nums[lo] + nums[hi] > -1*nums[now]:hi--

  直到以now为开头的三元组都遍历完,now++(也要跳过重复)

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var threeSum = function(nums) {
    nums.sort((a,b) => a-b);
    var rst = [];
    
    if(nums.length <3 || (nums.length==3&& nums.reduce((a,b)=>a+b)!=0)){
        return rst;
    }
    if(nums.length == 3 && nums.reduce((a,b)=>a+b)==0){
        rst.push([...nums])
        return rst;
    }
    var len = nums.length;
    var now = 0,lo=1,hi=len-1;
    while(nums[now] <= 0){
        while(lo < hi){
            if(nums[lo] + nums[hi] == -1*nums[now]){
                rst.push([nums[now],nums[lo],nums[hi]]);
                //skip same array去重
                while(nums[lo+1] == nums[lo]){
                    lo++;
                }
                while(nums[hi-1] == nums[hi]){
                    hi--;
                }
                lo++;
                hi--;
            }else if(nums[lo] + nums[hi] > -1*nums[now]){
                hi--;
            }else{
                lo++;
            }
        }
        while((now+1) <= (len-3) && nums[now+1] == nums[now]){
            now++;
        }
        now++;
        lo = now + 1;
        hi = len - 1;
    }
    return rst;
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值