LeetCode - 3Sum

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var threeSum = function(nums) {
  if (nums.length < 3) {
    return [];
  }

  const sortedNums = nums.sort((a, b) => a - b);
  const length = nums.length;
  const data = [];

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

    let l = i + 1;
    let r = length - 1;
    const target = sortedNums[i];
    while (l < r) {
      if (sortedNums[l] + sortedNums[r] + target === 0) {
        data.push([target, sortedNums[l], sortedNums[r]]);

        while (l < r && sortedNums[l] === sortedNums[l + 1]) l++; // ignore duplicate left values
        while (l < r && sortedNums[r] === sortedNums[r - 1]) r--; // ignore duplicate right values
        l++;
        r--;
      } else if (sortedNums[l] + sortedNums[r] + target < 0) { // find next large values.
        l++;
      } else { // find next small values.
        r--;
      }
    }
  }

  return data;
};

Success

Details

Runtime: 164 ms, faster than 99.23% of JavaScript online submissions for 3Sum.

Memory Usage: 47 MB, less than 42.73% of JavaScript online submissions for 3Sum.

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,486评论 0 10
  • Related Topics:[Array][Two Pointers]Similar Questions:[3S...
    lijia069阅读 267评论 1 1
  • Given an array S of n integers, are there elements a, b, ...
    Jiafu阅读 290评论 0 0
  • Problem Given an arraySofnintegers, are there elementsa,b...
    AlexSun1995阅读 291评论 0 0
  • 岸边柳依风,蜂蝶抱花舞。 湖光映山色,落日半边垂。 青草出旧黄,孩童江畔戏。 闲静闻鸟语,浅水观鱼跃。
    汉堡小哥阅读 169评论 0 1