LeetCode 🟡 1509. Minimum Difference Between Largest and Smallest Value in Three Moves
🔗 🟡 1509. Minimum Difference Between Largest and Smallest Value in Three Moves 1653
tags: Biweekly Contest 30
陣列(Array)
排序(Sorting)
貪心(Greedy)
題意
給定一個整數陣列 。
在每次操作中,你可以選擇 中的任意一個元素並將其更改為任何值。
在最多進行 次操作後,返回 中最大值和最小值之間的最小差。
約束條件
思路:排序(Sorting) + 貪心(Greedy)
在改變 個數字後,會有 個數字不變。假設所有不變的數字範圍為 。為了使最大值和最小值之間的差距最小,應將選擇的 個數字改為 中的任意 個數字。故考慮剩餘 個數字的最大值和最小值差距 即可。而為了使最大值和最小值之間的差距最小,選擇的數字應該是 之外 的數字,換句話說,會有至少連續 個數字落於 之間。
故將 進行排序後,選擇 連續 的 個數字,計算其最大值和最小值差距即可,總共只有 種情況。
另外一種思路是從貪心的角度思考,為了使最大值和最小值之間的差距最小,改變的數字應該從最大和最小的 個數字中選擇,因此可以選擇最小的 個數字和最大的 個數字,其中 ,總共有 種情況,分別計算出來後取最小值即可。
以上兩種方式雖然思路不同,但操作上是一樣的。
複雜度分析
- 時間複雜度:,排序的時間複雜度。
- 空間複雜度:,忽略排序的空間複雜度。
1 | class Solution: |
1 | class Solution { |
寫在最後
Cover photo is remixed from @吃肥皂泡泡, thanks for their work!
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 十六個天亮!
評論
WalineGiscus