-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path15.三数之和.js
39 lines (38 loc) · 877 Bytes
/
15.三数之和.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/**
* @param {number[]} nums
* @return {number[][]}
* https://leetcode-cn.com/problems/3sum/
*/
var threeSum = function(nums) {
const res = [];
if (nums.length < 3) return res;
// 排序
nums.sort((a,b) => a-b);
for (let i = 0; i < nums.length; i++) {
let l = i+1, r = nums.length - 1;
if (nums[i] === nums[i-1]) continue;
if (nums[i] > 0) break;
while (l < r) {
const s = nums[i] + nums[l] + nums[r];
if (s === 0) {
res.push([nums[i], nums[l], nums[r]])
while (nums[l] === nums[l+1] && l < r) {
l++;
}
while (nums[r] === nums[r-1] && l < r) {
r--;
}
l++;
r--;
} else if (s > 0) {
r--;
} else {
l++;
}
}
}
return res;
};
threeSum([-1,0,1,2,-1,-4])
// 输入:nums = [-1,0,1,2,-1,-4]
// 输出:[[-1,-1,2],[-1,0,1]]