LeetCode.908-最小差值 1(Smallest Range I)

這是悅樂書的第348次更新,第372篇原創

java

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]code

輸入:A = [1,3,6],K = 3
輸出:0
說明:B = [3,3,3]或B = [4,4,4]class

注意數據結構與算法

  • 1 <= A.length <= 10000數據

  • 0 <= A [i] <= 10000co

  • 0 <= K <= 10000

    return

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+篇,公衆號對話框回覆【數據結構與算法】、【算法】、【數據結構】中的任一關鍵詞,獲取系列文章合集。

以上就是所有內容,若是你們有什麼好的解法思路、建議或者其餘問題,能夠下方留言交流,點贊、留言、轉發就是對我最大的回報和支持!

相關文章
相關標籤/搜索