一、题目描述
给定一个整数数组 A
,对于每个整数 A[i]
,我们可以选择任意 x
满足 -K <= x <= K
,并将 x
加到 A[i]
中。
在此过程之后,我们得到一些数组 B
。
返回 B
的最大值和 B
的最小值之间可能存在的最小差值。
示例 1:
1 | 输入:A = [1], K = 0 |
示例 2:
1 | 输入:A = [0,10], K = 2 |
示例 3:
1 | 输入:A = [1,3,6], K = 3 |
提示:
1 <= A.length <= 10000
0 <= A[i] <= 10000
0 <= K <= 10000
二、题解
1.算法描述
- 遍历数组
2.个人分析
- 找出数组中的最大值和最小值,所求的数应该是
(max - min) > 2 * K ? max - min - 2 * K : 0;
3.代码
1 | int smallestRangeI(int *A, int ASize, int K) |
三、PS
这里再多说两句:
首先,这道题描述的不是很清楚。
转述:给定一个整数K
,使数组中的数加上[-K, K]
的数后的差值最小。
后来我就想,这其实就是一道线性规划的题嘛。
比如说题目中的测试用例:
1 | 输入:A = [0,10], K = 2 |
就是让散列点都向y=2靠近: