Skip to content

Commit b97ccc9

Browse files
authored
Merge pull request #1899 from andynullwong/0018
Create 0018-4sum.js & .ts
2 parents 75aac3b + 7b0cfd2 commit b97ccc9

File tree

2 files changed

+91
-0
lines changed

2 files changed

+91
-0
lines changed

Diff for: javascript/0018-4sum.js

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} target
4+
* @return {number[][]}
5+
*/
6+
var fourSum = function (nums, target) {
7+
const sortedNums = nums.sort((a, b) => a - b);
8+
const res = [];
9+
const quad = [];
10+
11+
const kSum = (k, start, target) => {
12+
if (k > 2) {
13+
for (let i = start; i < sortedNums.length; i++) {
14+
if (i !== start && sortedNums[i] === sortedNums[i - 1]) {
15+
continue;
16+
}
17+
quad.push(sortedNums[i]);
18+
kSum(k - 1, i + 1, target - sortedNums[i]);
19+
quad.pop();
20+
}
21+
} else {
22+
let left = start;
23+
let right = sortedNums.length - 1;
24+
25+
while (left < right) {
26+
const sum = sortedNums[left] + sortedNums[right];
27+
if (sum < target) {
28+
left++;
29+
} else if (sum > target) {
30+
right--;
31+
} else {
32+
res.push(
33+
quad.concat([sortedNums[left], sortedNums[right]])
34+
);
35+
left++;
36+
while (
37+
left < right &&
38+
sortedNums[left] === sortedNums[left - 1]
39+
) {
40+
left++;
41+
}
42+
}
43+
}
44+
}
45+
};
46+
kSum(4, 0, target);
47+
return res;
48+
};

Diff for: typescript/0018-4sum.ts

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
function fourSum(nums: number[], target: number): number[][] {
2+
const sortedNums: number[] = nums.sort((a: number, b: number) => a - b);
3+
const res: number[][] = [];
4+
const quad: number[] = [];
5+
6+
const kSum = (k: number, start: number, target: number): void => {
7+
if (k > 2) {
8+
for (let i = start; i < sortedNums.length; i++) {
9+
if (i !== start && sortedNums[i] === sortedNums[i - 1]) {
10+
continue;
11+
}
12+
quad.push(sortedNums[i]);
13+
kSum(k - 1, i + 1, target - sortedNums[i]);
14+
quad.pop();
15+
}
16+
} else {
17+
let left: number = start;
18+
let right: number = sortedNums.length - 1;
19+
20+
while (left < right) {
21+
const sum = sortedNums[left] + sortedNums[right];
22+
if (sum < target) {
23+
left++;
24+
} else if (sum > target) {
25+
right--;
26+
} else {
27+
res.push(
28+
quad.concat([sortedNums[left], sortedNums[right]])
29+
);
30+
left++;
31+
while (
32+
left < right &&
33+
sortedNums[left] === sortedNums[left - 1]
34+
) {
35+
left++;
36+
}
37+
}
38+
}
39+
}
40+
};
41+
kSum(4, 0, target);
42+
return res;
43+
}

0 commit comments

Comments
 (0)