LeetCode Hot 100:三数之和

用排序加双指针讲清三数之和:固定一个数后收缩左右指针,并处理重复三元组。

这期讲 LeetCode Hot 100「三数之和」:先排序,再固定一个数,把剩下两数变成双指针查找;去重分别发生在固定值和命中答案之后。

JavaScript 解法

function threeSum(nums) {
  nums.sort((a, b) => a - b);
  const res = [];

for (let i = 0; i < nums.length - 2; i++) {
    if (nums[i] > 0) break;
    if (i > 0 && nums[i] === nums[i - 1]) continue;

let left = i + 1;
    let right = nums.length - 1;

while (left < right) {
      const sum = nums[i] + nums[left] + nums[right];

if (sum < 0) {
        left++;
      } else if (sum > 0) {
        right--;
      } else {
        res.push([nums[i], nums[left], nums[right]]);
        left++;
        right--;

while (left < right && nums[left] === nums[left - 1]) left++;
        while (left < right && nums[right] === nums[right + 1]) right--;
      }
    }
  }

return res;
}
复杂度:排序后枚举固定值,每轮双指针线性收缩,时间复杂度是 O(n²);除排序开销外,额外空间复杂度是 O(1)

来源

関連コンテンツ

  • ログインするとコメントできます。
More from this channel