2020-01-21 21:43:52
问题描述:
问题求解:
这个题目还是有点难度的,感觉很巧妙也很难想到。
整体的思路如下:
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; }
原文:https://www.cnblogs.com/hyserendipity/p/12227140.html