三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请
你返回所有和为 0 且不重复的三元组。
注意:答案中不可以包含重复的三元组。
双指针解法(分解成一个数字 + 双数之和的问题) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 var threeSum = function (nums ) { const sortArr = nums.sort ((a, b ) => a - b) let result = [] for (let i = 0 ; i < sortArr.length - 2 ; i++) { if (i > 0 && nums[i] === nums[i - 1 ]) continue ; const sum = 0 - sortArr[i] const sumArr = sortArr.slice (i + 1 ) let LIndex = 0 let RIndex = sumArr.length - 1 while (LIndex < RIndex ) { const tempSum = sumArr[LIndex ] + sumArr[RIndex ] if (tempSum < sum) { LIndex ++ } else if (tempSum > sum) { RIndex -- } else { console .log (i, LIndex , RIndex ) result.push ([sortArr[i], sumArr[LIndex ], sumArr[RIndex ]]) while (LIndex < RIndex && sumArr[LIndex ] === sumArr[LIndex + 1 ]) { LIndex ++ } while (LIndex < RIndex && sumArr[RIndex ] === sumArr[RIndex - 1 ]) { RIndex -- } LIndex ++ RIndex -- } } } return result }