Skip to content

Commit c878341

Browse files
committed
add: 3Sum Closest
1 parent 7dfcb5c commit c878341

File tree

2 files changed

+50
-0
lines changed

2 files changed

+50
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ This is the solutions collection of my LeetCode submissions, most of them are pr
1919
|13|[Roman to Integer](https://leetcode.com/problems/roman-to-integer/) | [JavaScript](./src/roman-to-integer/res.js)|Easy|
2020
|14|[Longest Common Prefix](https://leetcode.com/problems/longest-common-prefix/) | [JavaScript](./src/longest-common-prefix/res.js)|Easy|
2121
|15|[3Sum](https://leetcode.com/problems/3sum/) | [JavaScript](./src/3sum/res.js) |Medium|
22+
|16|[3Sum Closest](https://leetcode.com/problems/3sum-closest/) | [JavaScript](./src/3sum-closest/res.js) |Medium|
2223
|17|[Letter Combinations of a Phone Number](https://leetcode.com/problems/letter-combinations-of-a-phone-number/) | [JavaScript](./src/letter-combinations-of-a-phone-number/res.js)|Medium|
2324
|19|[Remove Nth Node From End of List](https://leetcode.com/problems/remove-nth-node-from-end-of-list/) | [JavaScript](./src/remove-nth-node-from-end-of-list/res.js)|Medium|
2425
|22|[Generate Parentheses](https://leetcode.com/problems/generate-parentheses/) | [JavaScript](./src/generate-parentheses/res.js)|Medium|

src/3sum-closest/res.js

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
/**
2+
* res.js
3+
* @authors Joe Jiang (hijiangtao@gmail.com)
4+
* @date 2017-05-17 09:40:45
5+
*
6+
* Solution: https://discuss.leetcode.com/topic/1978/a-n-2-solution-can-we-do-better/2
7+
*
8+
* @param {number[]} nums
9+
* @param {number} target
10+
* @return {number}
11+
*/
12+
let threeSumClosest = function(nums, target) {
13+
let len = nums.length;
14+
15+
if (len < 3) {
16+
return nums.reduce(reduceArray, 0);
17+
}
18+
nums.sort(compareNumbers);
19+
20+
function compareNumbers(a, b) {
21+
return a - b;
22+
}
23+
24+
function reduceArray(a, b) {
25+
return a + b;
26+
}
27+
28+
let res = nums[0] + nums[1] + nums[2];
29+
for (let i = 0; i < len - 2; i++) {
30+
let j = i + 1,
31+
k = len - 1;
32+
33+
while (j < k) {
34+
let sum = nums[i] + nums[j] + nums[k];
35+
if (Math.abs(res - target) > Math.abs(sum - target)) {
36+
if (sum === target) return target;
37+
res = sum;
38+
}
39+
40+
if (sum > target) {
41+
k--;
42+
} else {
43+
j++;
44+
}
45+
}
46+
}
47+
48+
return res;
49+
};

0 commit comments

Comments
 (0)