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

2023/11/07閱讀時間約 1 分鐘


英文版點我中文版點我


↑看個小廣告,支持好內容↑



讀懂這段在表達啥,這題就算解掉一半了

讀懂這段在表達啥,這題就算解掉一半了

陣列中的每項都有一次調整的機會,可以被任意改成 nums[i]-k~nums[i]+k 之間的整數,而我們的目標是:盡可能縮小陣列的全距 (最大值-最小值)。


似乎很直觀,就把小的數字變大一點、大的數字變小一點就好了對吧?

// 成功的案例
nums=[1,9], k=2: 1397,全距=4

// 失敗的案例
nums=[5,7], k=3: 5874,全距=4
(顯然不對,這比調整前的差距還大)


事實上,直接把 5 改成 7,兩數就相同了,故正確答案應該是 0;即便我們在陣列加入很多很多 6,他們照樣可以被改成 7,並不影響結果。綜上,我們得到兩個結論:


  • 最小範圍確實是由 [max, min] 所決定。
  • 差值不會為負,當 max-min-2*k<0,答案必定為 0。


[備註] 這題因為文字敘述收到許多負評,但我認為它是刻意為之的,如何在有限時間內消化提取線索解題,也是邏輯與閱讀素養的一大考驗。話說回來,把蕪雜的需求化約進程式設計,這本身就是開發實務的縮影哪~ (茶


  • 本題分類標籤:ArrayMath
  • 本題正解率=69.3%

❤️ 若內容對你實用,歡迎追蹤本專題,或小額贊助支持~
⭐ 這是我的第 13 篇刷題筆記,完整解題索引看這裡 → Here

54會員
57內容數
我要成為 LeetCode 王!快跟我一起踏上旅程!
留言0
查看全部
發表第一個留言支持創作者!