原题地址910. 最小差值 II
给定一个整数数组 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
算法
对 A 进行排序,若整个数组同加同减那么差值就是 A[-1]-A[0] 。
半加半减情况则可将 A 视为俩部分 A1<A2,为了使差值最小,只能 A1 同加, A2 同减。那么整个 A 的最大值只能是 A1 尾或 A2 尾,最小值只能是 A1 头或 A2 头,比较这4个值就可以求得差值。
代码
def fun(A, K):
"""
:type A: List[int]
:type K: int
:rtype: int
"""
A.sort()
res = A[-1] - A[0]
for i in range(len(A) - 1):
big = max(A[-1], A[i] + 2 * K)
small = min(A[i + 1], A[0] + 2 * K)
res = min(res, big - small)
return res