Skip to content

Commit 653920c

Browse files
authored
Update 18-4sum.js
1 parent 795e674 commit 653920c

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed

18-4sum.js

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,49 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} target
4+
* @return {number[][]}
5+
*/
6+
const fourSum = function (nums, target) {
7+
nums.sort((a, b) => a - b)
8+
const results = []
9+
kSum(nums, target, 4, 0, [], results)
10+
return results
11+
}
12+
13+
function kSum(nums, target, k, i, acc, results) {
14+
if (nums[i] * k > target || nums[nums.length - 1] * k < target) return
15+
if (k > 2) {
16+
for (let j = i; j <= nums.length - k; j++) {
17+
if (j == i || nums[j] > nums[j - 1])
18+
kSum(nums, target - nums[j], k - 1, j + 1, [...acc, nums[j]], results)
19+
}
20+
} else {
21+
twoSum(nums, target, i, acc, results)
22+
}
23+
}
24+
25+
function twoSum(nums, target, i, acc, results) {
26+
let lo = i
27+
let hi = nums.length - 1
28+
while (lo < hi) {
29+
const sum = nums[lo] + nums[hi]
30+
if (sum == target) {
31+
results.push([...acc, nums[lo], nums[hi]])
32+
while (nums[lo] == nums[lo + 1]) lo++
33+
while (nums[hi] == nums[hi - 1]) hi--
34+
lo++
35+
hi--
36+
} else if (sum < target) {
37+
lo++
38+
} else {
39+
hi--
40+
}
41+
}
42+
}
43+
44+
45+
// another
46+
147
/**
248
* @param {number[]} nums
349
* @param {number} target

0 commit comments

Comments
 (0)