-
import java.util.Arrays;
-
-
public class ThreeSumClosest {
-
private int closest;
-
private boolean needInit;
-
-
public int threeSumClosest(int[] num, int target) {
-
closest = 0;
-
needInit = true;
-
Arrays.sort(num);
-
-
int i = 0;
-
for (i = 0; i <= num.length - 3; i++) {
-
if (i != 0 && num[i] == num[i - 1]) {
-
continue;
-
}
-
judgeAndPut(num, i, i + 1, num.length - 1, target);
-
}
-
return closest;
-
}
-
-
private void judgeAndPut(int[] num, int i, int p, int q, int target) {
-
-
while (p < q) {
-
int sum = num[i] + num[p] + num[q];
-
if (needInit || Math.abs(sum - target) < Math.abs(closest - target)) {
-
closest = sum;
-
}
-
needInit = false;
-
-
if (sum <= target) {
-
p++;
-
while (p < q && num[p] == num[p - 1]) {
-
p++;
-
}
-
} else if (sum > target){
-
q--;
-
while (p < q && num[q] == num[q + 1]) {
-
q--;
-
}
-
}
-
}
-
-
}
-
-
public static void main(String[] args) {
-
int num[] = {0,1,2};
-
System.out.println(new ThreeSumClosest().threeSumClosest(num, 3));
-
}
-
}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29012686/viewspace-1153205/
,如需转载,请注明出处,否则将追究法律责任。