File tree Expand file tree Collapse file tree 1 file changed +38
-8
lines changed Expand file tree Collapse file tree 1 file changed +38
-8
lines changed Original file line number Diff line number Diff 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+ } ;
You can’t perform that action at this time.
0 commit comments