Skip to content

Commit f478dea

Browse files
3 Sum closest
1 parent 13b5dbd commit f478dea

File tree

1 file changed

+38
-8
lines changed

1 file changed

+38
-8
lines changed

16 3Sum Closest.js

Lines changed: 38 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var threeSumClosest = function(nums, target) {
77
if(nums === null || nums.length < 2){
88
return null;
99
}
10-
10+
1111
if(nums.length === 3){
1212
return nums.reduce(function(prev,cur){return prev + cur;});
1313
}
@@ -16,34 +16,64 @@ var threeSumClosest = function(nums, target) {
1616
var closest = Infinity;
1717

1818
nums.sort(function(a,b){return a > b ? 1 : -1;});
19-
19+
2020
for(var i = 0; i < nums.length; i++){
2121
var j = i + 1;
2222
var k = nums.length - 1;
2323
while(j < k){
2424
var sum = nums[j] + nums[k] + nums[i];
2525
var diff = sum - target;
26-
26+
2727
if(diff === 0){
2828
return sum;
2929
}
30-
30+
3131
if(sum < target){
3232
diff = target - sum;
3333
j++;
3434
} else {
3535
diff = sum - target;
3636
k--
3737
}
38-
38+
3939
if(diff < closest){
4040
closest = diff;
4141
result = sum;
4242
}
4343
}
44-
44+
4545
while(i < (nums.length-1) && nums[i] === nums[i+1]) i++;
4646
}
47-
47+
4848
return result;
49-
};
49+
};
50+
51+
//Shorter solution
52+
var threeSumClosest = function(nums, target) {
53+
var closest = Number.Infinity;
54+
var gap = -1;
55+
56+
nums.sort(function(a, b) { return a - b });
57+
for(var i = 0; i < nums.length - 2; i++) {
58+
var low = i + 1;
59+
var high = nums.length - 1;
60+
61+
while(low < high) {
62+
var sum = nums[i] + nums[low] + nums[high];
63+
partialGap = Math.abs(target - sum);
64+
if(partialGap < gap || gap === -1) {
65+
gap = partialGap;
66+
closest = sum;
67+
}
68+
69+
if(sum === target) {
70+
return target;
71+
} else if (sum < target) {
72+
low++;
73+
} else {
74+
high--;
75+
}
76+
}
77+
}
78+
return closest;
79+
};

0 commit comments

Comments
 (0)