Smallest Range II

2020-01-21 21:43:52

问题描述:

Smallest Range II_第1张图片

Smallest Range II_第2张图片

问题求解:

这个题目还是有点难度的,感觉很巧妙也很难想到。

整体的思路如下:

1. 首先原问题等价于 +0 / + 2*K

2. 那么res = Max - Min

3. 不断更新Max,Min期望得到更小的res

    public int smallestRangeII(int[] A, int K) {
        int n = A.length;
        Arrays.sort(A);
        int max = A[0];
        int min = A[0];
        for (int num : A) {
            if (num > max) max = num;
            if (num < min) min = num;
        }
        int res = max - min;
        for (int i = 0; i < n - 1; i++) {
            max = Math.max(A[n - 1], A[i] + 2 * K);
            min = Math.min(A[0] + 2 * K, A[i + 1]);
            res = Math.min(res, max - min);
        }
        return res;
    }

  

你可能感兴趣的:(Smallest Range II)