From 711f2b7a401e781e09fb3f70e6a601eb419c5dfd Mon Sep 17 00:00:00 2001 From: Andy Wong Date: Thu, 5 Jan 2023 03:04:56 -0500 Subject: [PATCH 1/2] Create 0018-4sum.js --- javascript/0018-4sum.js | 48 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 javascript/0018-4sum.js diff --git a/javascript/0018-4sum.js b/javascript/0018-4sum.js new file mode 100644 index 000000000..fe342ed84 --- /dev/null +++ b/javascript/0018-4sum.js @@ -0,0 +1,48 @@ +/** + * @param {number[]} nums + * @param {number} target + * @return {number[][]} + */ +var fourSum = function (nums, target) { + const sortedNums = nums.sort((a, b) => a - b); + const res = []; + const quad = []; + + const kSum = (k, start, target) => { + if (k > 2) { + for (let i = start; i < sortedNums.length; i++) { + if (i !== start && sortedNums[i] === sortedNums[i - 1]) { + continue; + } + quad.push(sortedNums[i]); + kSum(k - 1, i + 1, target - sortedNums[i]); + quad.pop(); + } + } else { + let left = start; + let right = sortedNums.length - 1; + + while (left < right) { + const sum = sortedNums[left] + sortedNums[right]; + if (sum < target) { + left++; + } else if (sum > target) { + right--; + } else { + res.push( + quad.concat([sortedNums[left], sortedNums[right]]) + ); + left++; + while ( + left < right && + sortedNums[left] === sortedNums[left - 1] + ) { + left++; + } + } + } + } + }; + kSum(4, 0, target); + return res; +}; From 7b0cfd22328decebb434d95cd74cc84188d352d6 Mon Sep 17 00:00:00 2001 From: Andy Wong Date: Thu, 5 Jan 2023 03:05:08 -0500 Subject: [PATCH 2/2] Create 0018-4sum.ts --- typescript/0018-4sum.ts | 43 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 typescript/0018-4sum.ts diff --git a/typescript/0018-4sum.ts b/typescript/0018-4sum.ts new file mode 100644 index 000000000..dfe86108f --- /dev/null +++ b/typescript/0018-4sum.ts @@ -0,0 +1,43 @@ +function fourSum(nums: number[], target: number): number[][] { + const sortedNums: number[] = nums.sort((a: number, b: number) => a - b); + const res: number[][] = []; + const quad: number[] = []; + + const kSum = (k: number, start: number, target: number): void => { + if (k > 2) { + for (let i = start; i < sortedNums.length; i++) { + if (i !== start && sortedNums[i] === sortedNums[i - 1]) { + continue; + } + quad.push(sortedNums[i]); + kSum(k - 1, i + 1, target - sortedNums[i]); + quad.pop(); + } + } else { + let left: number = start; + let right: number = sortedNums.length - 1; + + while (left < right) { + const sum = sortedNums[left] + sortedNums[right]; + if (sum < target) { + left++; + } else if (sum > target) { + right--; + } else { + res.push( + quad.concat([sortedNums[left], sortedNums[right]]) + ); + left++; + while ( + left < right && + sortedNums[left] === sortedNums[left - 1] + ) { + left++; + } + } + } + } + }; + kSum(4, 0, target); + return res; +}