给定一个整数数组 A
,对于每个整数 A[i]
,我们可以选择 x = -K
或是 x = K
,并将 x
加到 A[i]
中。
在此过程之后,我们得到一些数组 B
。
返回 B
的最大值和 B
的最小值之间可能存在的最小差值。
示例 1:
输入:A = [1], K = 0 输出:0 解释:B = [1]
示例 2:
输入:A = [0,10], K = 2 输出:6 解释:B = [2,8]
示例 3:
输入:A = [1,3,6], K = 3 输出:3 解释:B = [4,6,3]
提示:
1 <= A.length <= 10000
0 <= A[i] <= 10000
0 <= K <= 10000
数组中的每一个数字,必须选择+K和-K,如果都是-K或者+K肯定没有意义,在A里,肯定要有一个数就是边界,边界前加,后建,定位A1,A2,A1<A2,则最小值为min(min(A1), min(A2)),最大值为max(max(A1),max(A2))
class Solution(object):
def smallestRangeII(self, A, K):
"""
:type A: List[int]
:type K: int
:rtype: int
"""
A.sort()
ret = A[len(A)-1] -A[0]
for i in range(1, len(A)):
minnum = min(A[0]+K, A[i]-K)
maxnum = max(A[i-1]+K, A[-1]-K)
ret = min(ret, maxnum-minnum)
return ret