✊ 作者: 七弦 ✊不积跬步,无以至千里;不积小流,无以成江海。 ✊ 时间:2021.07.22 ✊ 题目来源: 力扣 - 15

1. 题目说明

image.png

2.1 双指针

  1. var nums = [-1, 0, 1, 2, -1, -4];
  2. const threeSum = function (nums) {
  3. const res = [];
  4. // nums进行排序
  5. nums = nums.sort((a, b) => a - b);
  6. // 循环nums
  7. var i,
  8. maxLength = nums.length;
  9. for (i = 0; i < maxLength; i++) {
  10. // 得到目标值
  11. var target = -nums[i],
  12. left = i + 1,
  13. right = maxLength - 1,
  14. sum = nums[left] + nums[right]; // 得到两数之和
  15. if (i > 0 && nums[i] === nums[i - 1]) continue
  16. // 双指针进行跳转
  17. while (left < right) {
  18. if (sum === target) {
  19. res.push([nums[i], nums[left], nums[right]]);
  20. while(left < right && nums[left] === nums[left + 1]);
  21. while(left < right && nums[right] === nums[right - 1]);
  22. left++
  23. right--
  24. } else if (sum < target) {
  25. left++;
  26. } else {
  27. right--;
  28. }
  29. }
  30. }
  31. return res;
  32. };
  33. const result = threeSum(nums);
  34. console.log('🚀 ~ file: 2-threeSum.js ~ line 8 ~ result', result);