LeetCode题解 => 15.三数之和(四十一)

三数之和

一、LeetCode题解

瞧一瞧~

二、算法题

题目

给你一个包含 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) {
    nums = nums.sort(function(a, b) {
        return a - b
    }); //先排序
    var i = 0;
    var arr = []; //结果数组
    while (i < nums.length - 1) {
        var a = nums[i],
            j = i + 1,
            k = nums.length - 1;
        while (j < k) {
            var b = nums[j],
                c = nums[k];
            var sum = a + b + c;
            if (sum == 0) arr.push([a, b, c]); //存起来
            if (sum <= 0)
                while (nums[j] == b && j < k) j++; //第2个数
            if (sum >= 0)
                while (nums[k] == c && j < k) k-- //最后一个数
        }
        while (nums[i] == a && i < nums.length - 1) i++; //第一个数
    }
    return arr
};
相关推荐
©️2020 CSDN 皮肤主题: 博客之星2020 设计师:CY__ 返回首页