欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

908. Smallest Range I(最小差值 I)

程序员文章站 2022-04-02 21:21:22
...

908. 最小差值 I

给定一个整数数组 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

    解法一

    //时间复杂度O(n), 空间复杂度O(1)
    class Solution {
    public:
        int smallestRangeI(vector<int>& A, int K) {
            int n = A.size();
            int maxV = A[0];
            int minV = maxV;
            for(int i = 1; i < n; i++) {
                maxV = max(A[i], maxV);
                minV = min(A[i], minV);
            }
            return max(0, maxV - minV - 2 * K);
        }
    };
    

    思路:

    题目表述有点晦涩,翻译成简单的语言就是:

    给出一个数组A,和一个数K。可以对A的每个元素进行加减x操作(要求x位于正负K之间),求操作后的数组A最大最小值之差的最小值是多少。

    思路也很简单,只要求出数组的最大值maxV和最小值minV,用两者之差减去两倍的K(小于0则取0),就是答案。

    2019/08/3 23:35
    相关标签: 刷题笔记