跳转至

LeetCode: 908. 最小差值 I

1、题目描述

给定一个整数数组 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
输出:0
解释:B = [3,3,3] 或 B = [4,4,4]

提示:

  1. 1 <= A.length <= 10000
  2. 0 <= A[i] <= 10000
  3. 0 <= K <= 10000

2、解题思路

题目实际不难,主要是描述不清楚

  • 给定一个数组A与整数K

  • 在范围-K~K选出一个数字,分别与数组A中的元素做差值,得到新的数组B

  • 返回数组B中最大值与最小值的差值(找出可能的最小值)

(min-K)------min------(min+K)
                      (差值为0)
                                            (max-K)------max------(max+k)

(min-K)------min------(min+K)
                                                   <----(差值)--->
                                                                  (max-K)------max------(max+k)
  • 如上所示,当数组中有交叉的时候,最小的差值就是0
  • 如果没有交叉,那么最小差值就是如上所示
class Solution:
    def smallestRangeI(self, A: List[int], K: int) -> int:
        return max(0, max(A) - min(A) - 2 * K)