给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0
?找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。
例:
给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为: [ [-1, 0, 1], [-1, -1, 2] ]
在leetCode中,这道题其实与两数之和那题一样,思路我感觉很像。首先当然是暴力破解法,其次是空间换时间,首先暴力破解法就是三层遍历,四数之和就是四层遍历,所以叫暴力破解法,也是效率比较低的一种方法。那么三数之和的空间换时间要怎么理解呢。
首先给数组排个序,从小到大,然后固定其中一个值,然后定义首尾两个指针,当第一个数大于0 或者最后一个数小于0的时候,直接跳过,因为这样相加怎么都不可能等于0,只有第一个数小于0,首指针小于尾指针的时候再去判断这三个数相加是否等于0,如果等于0,返回这三个数,然后首尾指针移动,下面看看实际代码例子,都有注释
/**
* @param {number[]} nums
* @return {number[][]}
*/
var threeSum = function(nums) {
//用来存取最后结果集
let result = new Array();
//头指针
let head;
//尾指针
let end;
//固定值
let fixedVal;
//排序
nums.sort((a, b