力扣16題:最接近的三數之和(排序、雙指標解決)
阿新 • • 發佈:2022-04-16
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; } }
值得注意的是搞清楚什麼時候更新最近距離,我就是在這裡被坑了半小時,只有當前距離小於以前距離的時候才會更新。