三数之和Ts

62 阅读1分钟
function threeSums(nums: number[]): number[][] {
  const result: number[][] = [];

  // 先对数组进行排序
  nums.sort((a, b) => a - b);

  // 遍历数组
  for (let i = 0; i < nums.length - 2; i++) {
    // 如果当前元素与前一个元素相同,跳过避免重复
    if (i > 0 && nums[i] === nums[i - 1]) {
      continue;
    }

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

// 寻找三数之和等于0的组合
while (left < right) {
  const sum = nums[i] + nums[left] + nums[right];

  if (sum === 0) {
    result.push([nums[i], nums[left], nums[right]]);

    // 跳过重复元素
    while (left < right && nums[left] === nums[left + 1]) {
      left++;
    }
    while (left < right && nums[right] === nums[right - 1]) {
      right--;
    }

    left++;
    right--;
  } else if (sum < 0) {
    left++;
  } else {
    right--;
  }
}
 }

  return result;
 }

const numa = [-1, 0, 1, 2, -1, -4];
const result = threeSums(numa);
console.log(result); //[ [ -1, -1, 2 ], [ -1, 0, 1 ] ]。有两组满足三数之和等于0的组合。第一个组合是 [-1, -1, 2],第二个组合是 [-1, 0, 1]。