1
+ public class Solution {
2
+ public static int closest ;
3
+ public static int threeSum ;
4
+ public int threeSumClosest (int [] num , int target ) {
5
+ // Start typing your Java solution below
6
+ // DO NOT write main() function
7
+ closest = Integer .MAX_VALUE ;
8
+ threeSum = Integer .MIN_VALUE ;
9
+ if (num .length < 3 ) return 0 ;
10
+
11
+ Arrays .sort (num );
12
+
13
+ for (int i = 0 ; i < num .length ; i ++){
14
+ calculateTuples (num , target , i );
15
+ if (threeSum == target ) return threeSum ;
16
+ while (i + 1 < num .length && num [i + 1 ] == num [i ]){
17
+ i ++;
18
+ }
19
+ }
20
+ return threeSum ;
21
+ }
22
+ public void calculateTuples (int [] num , int target , int i ){
23
+ int lp = i + 1 ;
24
+ int rp = num .length - 1 ;
25
+ while (lp < rp ){
26
+ int sum = num [i ] + num [lp ] + num [rp ];
27
+ update3Sum (i , lp , rp , target , num );
28
+ if (sum == target ){
29
+ while (lp + 1 < rp && num [lp + 1 ] == num [lp ]) {
30
+ lp ++;
31
+ }
32
+ lp ++;
33
+ while (rp - 1 > lp && num [rp - 1 ] == num [rp ]) {
34
+ rp --;
35
+ }
36
+ rp --;
37
+ }
38
+ else if (sum < target ){
39
+ lp ++;
40
+ }
41
+ else {
42
+ rp --;
43
+ }
44
+ }
45
+ }
46
+
47
+ public void update3Sum (int i , int lp , int rp , int target , int [] num ){
48
+ int sum = num [lp ] + num [rp ] + num [i ];
49
+ int diff = Math .abs (target - sum );
50
+ if (diff < closest ){
51
+ closest = diff ;
52
+ threeSum = sum ;
53
+ }
54
+ }
55
+ }
0 commit comments