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