-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy path0018_4Sum.js
53 lines (50 loc) · 1.57 KB
/
0018_4Sum.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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
/**
* @param {number[]} nums
* @param {number} target
* @return {number[][]}
*/
var fourSum = function(nums, target) {
let result = [];
nums = nums.sort((a,b)=>{
return a-b;
})
function findThreeSum(nums, target){
let dict = {}
let result = [];
for(let i = 0;i<nums.length;i++){
if(i>=0 && nums[i] === nums[i-1]){
continue
}
let l_pointer = i+1;
let r_pointer = nums.length-1;
while(l_pointer < r_pointer){
if(nums[i] + nums[l_pointer] + nums[r_pointer] === target){
let tmp = [nums[i], nums[l_pointer], nums[r_pointer]]
result.push(tmp)
l_pointer++;
while(l_pointer < r_pointer && nums[l_pointer] === nums[l_pointer-1]){
l_pointer++
}
} else if(nums[i] + nums[l_pointer] + nums[r_pointer] < target){
l_pointer++
}
if(nums[i] + nums[l_pointer] + nums[r_pointer] > target){
r_pointer--;
}
}
}
return result
}
for(let i = 0;i<nums.length;i++){
if(nums[i] === nums[i-1]){
continue
}
let find_three = findThreeSum(nums.slice(i+1),target-nums[i])
if(find_three.length > 0){
for(let j = 0;j<find_three.length;j++){
result.push([nums[i]].concat(find_three[j]))
}
}
}
return result;
};