Skip to Content

三数之和

三数之和

给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != ji != kj != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复的三元组。

注意:答案中不可以包含重复的三元组。

function threeSum(nums: number[]): number[][] { nums.sort((a, b) => a - b); const len = nums.length - 1; const res: number[][] = []; for (let i = 0; i <= len; i++) { const v1 = nums[i]; // 当前值大于0,后面的值都大于0,不可能相加等于0 if (v1 > 0) { break; } let left = i + 1, right = len; // 去重,避免重复计算 while (nums[i] === nums[i + 1]) { ++i; } while (left < right) { const sum = nums[left] + nums[right] + v1; if (sum === 0) { res.push([v1, nums[left], nums[right]]); --right; ++left; while (nums[left] === nums[left - 1]) { ++left; } while (nums[right] === nums[right + 1]) { --right; } } else if (sum < 0) { ++left; } else { --right; } } } return res; }
Last updated on