3Sum
1 var threeSum = function(nums) {
2 var res = [],
3 i, l, r, sum;
4
5 if (nums.length < 3) {
6 return res;
7 }
8
9 nums = nums.sort(function(num1, num2) {
10 return num1 - num2;
11 });
12
13 for (i = 0; i < nums.length - 2 && nums[i] <= 0; i++) {
14 //去重
15 if (nums[i] === nums[i - 1]) {
16 continue;
17 }
18 l = i + 1;
19 r = nums.length - 1;
20 while (l < r) {
21 sum = nums[i] + nums[l] + nums[r]
22 if (sum < 0) {
23 l++;
24 } else if (sum > 0) {
25 r--;
26 } else {
27 //去重
28 if ((l === i + 1) || (l > i + 1 && nums[l] !== nums[l - 1])) {
29 res[res.length] = [nums[i], nums[l], nums[r]];
30 }
31 l++;
32 }
33 }
34 }
35
36 return res;
37 };