题目描述:

给定一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?找出所有满足条件且不重复的三元组。
注意:答案中不可以包含重复的三元组。

  1. 例如, 给定数组 nums = [-1, 0, 1, 2, -1, -4],
  2. 满足要求的三元组集合为:
  3. [
  4. [-1, 0, 1],
  5. [-1, -1, 2]
  6. ]
  7. 来源:力扣(LeetCode
  8. 链接:https://leetcode-cn.com/problems/3sum
  9. 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

算法实现:JavaScript

  1. /**
  2. * @param {number[]} nums
  3. * @return {number[][]}
  4. */
  5. var threeSum = function(nums) {
  6. var sum = []
  7. nums.sort((a, b) => a - b)
  8. if (nums === null || nums.length < 3) {
  9. return sum
  10. }
  11. for (var i = 0; i < nums.length; i++ ) {
  12. if (nums[i] > 0) {
  13. break
  14. }
  15. if (i > 0 && nums[i] === nums[i - 1]) {
  16. continue
  17. }
  18. var j = i + 1
  19. var k = nums.length - 1
  20. while (j < k) {
  21. var add = nums[i] + nums[j] + nums[k]
  22. if (add === 0 ) {
  23. sum.push([nums[i], nums[j], nums[k]])
  24. while (nums[j] === nums[j + 1]) {
  25. j++
  26. }
  27. while (nums[k] === nums[k - 1]) {
  28. k--
  29. }
  30. j++
  31. k--
  32. } else if (add > 0) {
  33. k--
  34. } else {
  35. j++
  36. }
  37. }
  38. }
  39. return sum
  40. };

思路:

应用哈希算法,多次去重。

总结:

尝试了很久的暴力法解题都没有成功,最后通过借鉴大佬的代码勉强通过了,但是中间很多细节都不是自己独立想出来的,需要对哈希算法进一步理解并且深入思考这道题。