1. 程式人生 > 其它 >力扣16題:最接近的三數之和(排序、雙指標解決)

力扣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; } }


值得注意的是搞清楚什麼時候更新最近距離,我就是在這裡被坑了半小時,只有當前距離小於以前距離的時候才會更新。