首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >leetcode 15 3sum

leetcode 15 3sum

作者头像
ACK
发布2020-01-14 16:57:22
发布2020-01-14 16:57:22
3160
举报

leetcode 15,大概就是给一个若干整数组成的数组,求出其中3个的和为0的组数。

思路: 遍历每一个数字,寻找与这个数字外的另两个的数字的和为0.有几个小地方优化下就能过了

代码语言:javascript
复制
/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var threeSum = function (nums) {
    const length = nums.length;
    const result = [],
        results = {};
    nums.sort((a, b) => a - b);//先对数组排序
    for (let i = 0; i < length; i++) {
        let left = i + 1, //这里的左端必须要从i+1开始,不仅可以减少比较的次数还能起到去重的作用
            right = length - 1;
        if (i > 0 && nums[i] === nums[i - 1]) {
            continue; //这里是在[1,1,1,1,1]这种情况下只对一个1进行查找
        }
        while (left < right) {
            if (left === i) {
                left++;
                continue;
            }
            if (right === i) {
                right--;
                continue;
            }
            let current = nums[i] + nums[left] + nums[right];
            if (current === 0) {
                let temp = [nums[i], nums[left], nums[right]]
                    result.push(temp)
                        //优化 也是避免了相同数字下的多次比较问题
                    let lefttemp = nums[left],
                        righttemp = nums[right];
                    while (left < right && lefttemp === nums[left]) {
                        left++;
                    }
                    while (left < right && righttemp === nums[right]) {
                        right--;
                    }
                }
                //前面的数组排序就是为了下面这里
                if (current > 0) {
                    right--;//和大于0就右边的减减,这样和才会减少
                }
                if (current < 0) {
                    left++;
                }
            }
        }
        return result;
    };
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档