美文网首页程序员算法算法提高之LeetCode刷题
LeetCode.908-最小差值 1(Smallest Ran

LeetCode.908-最小差值 1(Smallest Ran

作者: 程序员小川 | 来源:发表于2019-06-09 22:01 被阅读28次

    这是悦乐书的第348次更新,第372篇原创

    01 看题和准备

    今天介绍的是LeetCode算法题中Easy级别的第213题(顺位题号是908)。给定一个整数数组A,对于每个整数A[i],我们可以选择任何x,其中-K <= x <= K,并将x的值加到A[i]上。在这个过程之后,A变成了新数组B.

    返回B的最大值和B的最小值之间的最小可能差值。例如:

    输入:A = [1],K = 0
    输出:0
    说明:B = [1]

    输入:A = [0,10],K = 2
    输出:6
    说明:B = [2,8]

    输入:A = [1,3,6],K = 3
    输出:0
    说明:B = [3,3,3]或B = [4,4,4]

    注意

    • 1 <= A.length <= 10000

    • 0 <= A [i] <= 10000

    • 0 <= K <= 10000

    02 解题

    题目要求我们计算B数组中最大值和最小值的最小可能差值,而B数组是由A数组中每一个元素加上K后得到的。

    要想最大值和最小值的差值最小,即最大值、最小值无限接近,最理想状态是最大值等于最小值,其差值为0。

    所以,我们只需要找到A里面的最大值、最小值,将最大值减去x的最大值,即K,将最小值加上x的最大值,让最大值、最小值的数值更加接近。

    另外,最大值和最小值的最小可能差值是不能小于0的,最小只能到0。

    public int smallestRangeI(int[] A, int K) {
        int max = -1, min = 10001;
        for (int num : A) {
            if (num > max) {
                max = num;
            }
            if (num < min) {
                min = num;
            }
        }
        if ((max-K)-(min+K) < 0) {
            return 0;
        }
        return (max-K)-(min+K);
    }
    

    03 小结

    算法专题目前已连续日更超过六个月,算法题文章216+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

    以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

    相关文章

      网友评论

        本文标题:LeetCode.908-最小差值 1(Smallest Ran

        本文链接:https://www.haomeiwen.com/subject/noroxctx.html