class Solution { public int threeSumClosest(int[] arr, int n) { for (int i = 0; i < arr.length; i++) { int max = i; for (int j = i + 1; j < arr.length; j++) { if (arr[max] > arr[j]) { max = j; } } if (max != i) { int t = arr[max]; arr[max] = arr[i]; arr[i] = t; } } int sum = arr[0] + arr[1] + arr[2]; for (int i = 0; i < arr.length; i++) { int l = i + 1; int r = arr.length - 1; while (l < r) { int x = arr[i] + arr[l] + arr[r]; if (Math.abs(n - x) < Math.abs(n - sum)) {// 现在的位置比原来的位置距离n更近,更新距离 sum = x; // System.out.println(arr[i] + " " + arr[l] + " " + arr[r]); } if (x > n) {// 左边是小,右边大,如果值大于n,那就去掉最右边的一位 r--; } else if (x < n) { l++; } else { return sum; } } } return sum; } }
值得注意的是搞清楚什么时候更新最近距离,我就是在这里被坑了半小时,只有当前距离小于以前距离的时候才会更新。