Open Tcdian opened 4 years ago
/**
* @param {number[]} nums
* @return {number[][]}
*/
var threeSum = function(nums) {
const result = [];
const sortedNums = [...nums].sort((a, b) => a - b);
for (let i = 0; i < sortedNums.length - 2; i++) {
if (sortedNums[i] > 0) {
break;
}
if (i > 0 && sortedNums[i] === sortedNums[i - 1]) {
continue;
}
let left = i + 1;
let right = sortedNums.length - 1;
while (left < right) {
if (left > i + 1 && sortedNums[left] === sortedNums[left - 1]) {
left++;
continue;
}
if (
right < sortedNums.length - 1
&& sortedNums[right] === sortedNums[right + 1]
) {
right--;
continue;
}
if (sortedNums[i] + sortedNums[left] + sortedNums[right] < 0) {
left++;
} else if (sortedNums[i] + sortedNums[left] + sortedNums[right] > 0) {
right--;
} else {
result.push([sortedNums[i], sortedNums[left], sortedNums[right]]);
left++;
right--;
}
}
}
return result;
};
function threeSum(nums: number[]): number[][] {
const result: number[][] = [];
const sortedNums = [...nums].sort((a, b) => a - b);
for (let i = 0; i < sortedNums.length - 2; i++) {
if (sortedNums[i] > 0) {
break;
}
if (i > 0 && sortedNums[i] === sortedNums[i - 1]) {
continue;
}
let left = i + 1;
let right = sortedNums.length - 1;
while (left < right) {
if (left > i + 1 && sortedNums[left] === sortedNums[left - 1]) {
left++;
continue;
}
if (
right < sortedNums.length - 1
&& sortedNums[right] === sortedNums[right + 1]
) {
right--;
continue;
}
if (sortedNums[i] + sortedNums[left] + sortedNums[right] < 0) {
left++;
} else if (sortedNums[i] + sortedNums[left] + sortedNums[right] > 0) {
right--;
} else {
result.push([sortedNums[i], sortedNums[left], sortedNums[right]]);
left++;
right--;
}
}
}
return result;
}
15. 3Sum
给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。
Example
Note