# 015.3Sum








































// https://leetcode-cn.com/problems/3sum/

/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var threeSum = function(nums) {
  nums.sort((a, b) => a - b);
  let ans = []
  let len = nums.length
  for (let i = 0; i < len; i++ ) {
    if (i && nums[i] === nums[i - 1]) continue
    let target = -nums[i]
    let [start, end] = [i + 1, len - 1]
    while (start < end) {
      let sum = nums[start] + nums[end];
      if (sum > target) {
        end--;
      } else if (sum < target) {
        start++;
      } else {
        ans.push([nums[i], nums[start], nums[end]]);
        // 若相邻元素相等,直接跳过
        while (nums[start] === nums[start + 1]) {
            start++;
        }
        while (nums[end] === nums[end - 1]) {
            end--;
        }
        // 常规循环递增
        start++;
        end--;
      }
    }
  }

  return ans
};