這是悅樂書的第348次更新,第372篇原創(chuàng)
01 看題和準(zhǔn)備
今天介紹的是LeetCode算法題中Easy級(jí)別的第213題(順位題號(hào)是908)。給定一個(gè)整數(shù)數(shù)組A,對(duì)于每個(gè)整數(shù)A[i],我們可以選擇任何x,其中-K <= x <= K,并將x的值加到A[i]上。在這個(gè)過程之后,A變成了新數(shù)組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 解題
題目要求我們計(jì)算B數(shù)組中最大值和最小值的最小可能差值,而B數(shù)組是由A數(shù)組中每一個(gè)元素加上K后得到的。
要想最大值和最小值的差值最小,即最大值、最小值無限接近,最理想狀態(tài)是最大值等于最小值,其差值為0。
所以,我們只需要找到A里面的最大值、最小值,將最大值減去x的最大值,即K,將最小值加上x的最大值,讓最大值、最小值的數(shù)值更加接近。
另外,最大值和最小值的最小可能差值是不能小于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 小結(jié)
算法專題目前已連續(xù)日更超過六個(gè)月,算法題文章216+篇,公眾號(hào)對(duì)話框回復(fù)【數(shù)據(jù)結(jié)構(gòu)與算法】、【算法】、【數(shù)據(jù)結(jié)構(gòu)】中的任一關(guān)鍵詞,獲取系列文章合集。
以上就是全部?jī)?nèi)容,如果大家有什么好的解法思路、建議或者其他問題,可以下方留言交流,點(diǎn)贊、留言、轉(zhuǎn)發(fā)就是對(duì)我最大的回報(bào)和支持!