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) {
7
7
if ( nums === null || nums . length < 2 ) {
8
8
return null ;
9
9
}
10
-
10
+
11
11
if ( nums . length === 3 ) {
12
12
return nums . reduce ( function ( prev , cur ) { return prev + cur ; } ) ;
13
13
}
@@ -16,34 +16,64 @@ var threeSumClosest = function(nums, target) {
16
16
var closest = Infinity ;
17
17
18
18
nums . sort ( function ( a , b ) { return a > b ? 1 : - 1 ; } ) ;
19
-
19
+
20
20
for ( var i = 0 ; i < nums . length ; i ++ ) {
21
21
var j = i + 1 ;
22
22
var k = nums . length - 1 ;
23
23
while ( j < k ) {
24
24
var sum = nums [ j ] + nums [ k ] + nums [ i ] ;
25
25
var diff = sum - target ;
26
-
26
+
27
27
if ( diff === 0 ) {
28
28
return sum ;
29
29
}
30
-
30
+
31
31
if ( sum < target ) {
32
32
diff = target - sum ;
33
33
j ++ ;
34
34
} else {
35
35
diff = sum - target ;
36
36
k --
37
37
}
38
-
38
+
39
39
if ( diff < closest ) {
40
40
closest = diff ;
41
41
result = sum ;
42
42
}
43
43
}
44
-
44
+
45
45
while ( i < ( nums . length - 1 ) && nums [ i ] === nums [ i + 1 ] ) i ++ ;
46
46
}
47
-
47
+
48
48
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