LeetCode 🟡 2517. Maximum Tastiness of Candy Basket
🔗 🟡 2517. Maximum Tastiness of Candy Basket 2021
tags: Week Contest 325
二分搜尋(Binary Search)
排序(Sorting)
題意
給定一個正整數陣列 ,其中 表示第 種糖果的價格,另給定一個正整數 。
將 種 不同 種類的糖果放入糖果籃中,糖果籃的 美味程度(tastiness) 是糖果籃中任意兩種糖果的價格差的最小值。
返回糖果籃的 最大 美味程度。
約束條件
思路:排序(Sorting) + 二分搜尋(Binary Search)
首先確定思路,美味程度即最大的最小價格差,而要直接計算出最大的美味程度顯然是很困難的,但對於給定的美味程度 ,我們可以確定是否有 顆糖果的價格差都 ,因此可以使用 二分搜尋(Binary Search) 來找到最大的最小價格差。
定義一個函數 check(d)
來檢查是否可以將 種 不同 種類的糖果放入糖果籃中,使得糖果籃的 美味程度(tastiness) 至少為 。
- 使用 來記錄放置糖果的數量, 來記錄前一個糖果的價格。
- 遍歷 陣列中的每個元素
- 如果 ,代表可以放置糖果,則 加一,並更新 為 。
- 最後返回 ,即是否可以放置 種 不同 種類的糖果。
這裡使用左閉右閉區間進行二分搜尋,令 ,,在 的範圍內進行二分搜尋,不斷調整左右範圍直到找到最大的最小價格差為止。
- 根據定義的
check
函數,區間的左側為 ,而右側為 。 - 如果 ,則將左範圍擴大到 。
- 如果 ,則將右範圍縮小到 。
- 當區間為空,即 時,終止搜尋。
最終返回 ,即最大的最小價格差。
複雜度分析
- 時間複雜度: ,其中 為陣列 的長度, 為 的最大值。
- 對陣列 進行排序需要 時間。
- 需要進行 次二分搜尋,每次搜尋需要遍歷 個元素來檢查是否可以放置 種 不同 種類的糖果。
- 空間複雜度: ,忽略排序的空間複雜度。
1 | class Solution: |
1 | class Solution { |
類題
最小化最大值
本質是二分答案求最小。
- 🔴 410. Split Array Largest Sum
- 🟡 2064. Minimized Maximum of Products Distributed to Any Store 1886
- 🟡 1760. Minimum Limit of Balls in a Bag 1940
- 🟡 1631. Path With Minimum Effort 1948
- 🟡 2439. Minimize Maximum of Array 1965
- 🟡 2560. House Robber IV 2081
- 🔴 778. Swim in Rising Water 2097
- 🟡 2513. Minimize the Maximum of Two Arrays 2155
- 🟡 2513. Minimize the Maximum of Two Arrays 2302
最大化最小值
本質是二分答案求最大。
- 🟡 2517. Maximum Tastiness of Candy Basket 2021
- 🟡 1552. Magnetic Force Between Two Balls 1920
同 2517 題 - 🟡 2812. Find the Safest Path in a Grid 2154
- 🔴 2528. Maximize the Minimum Powered City 2236
題單來自 @灵茶山艾府
寫在最後
Cover photo is generated by @たろたろ, thanks for their work!
和 1552. Magnetic Force Between Two Balls 解題紀錄 完全相同,只是敘述上稍有不同。
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 十六個天亮!
評論
WalineGiscus