LeetCode 910. 最小差值 II

原题地址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. 1 <= A.length <= 10000
  2. 0 <= A[i] <= 10000
  3. 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

猜你喜欢

转载自blog.csdn.net/HJXINKKL/article/details/82853080