LeetCode 🟡 1552. Magnetic Force Between Two Balls
🔗 🟡 1552. Magnetic Force Between Two Balls 1920
tags: Week Contest 202
二分搜尋(Binary Search)
排序(Sorting)
題意
給定一個長度為 的整數陣列 和一個整數 ,其中 代表第 個籃子的位置,現在需要把 顆球放到這些籃子裡,使得任意兩球之間的 最小距離 最大。
若兩個球分別位於 和 ,則它們之間的距離為 。
返回最大的最小距離。
約束條件
- 所有在 中的整數都是 不同 的。
思路:排序(Sorting) + 二分搜尋(Binary Search)
首先確定思路,要直接計算出最大的最小距離顯然是很困難的,但對於給定的距離 ,我們可以確定是否有 顆球的距離都 ,因此可以使用 二分搜尋(Binary Search) 來找到最大的最小距離。
定義一個函數 check(d)
來檢查在待定距離 內是否能放入 顆球,使得任意兩球之間的距離至少為 。
- 使用 來記錄放置球的數量, 來記錄前一個球的位置。
- 遍歷 陣列中的每個元素
- 如果 ,代表可以放置球,則 加一,並更新 為 。
- 最後返回 ,即是否可以放置 顆球。
這裡使用左閉右閉區間進行二分搜尋,令 ,,在 的範圍內進行二分搜尋,不斷調整左右範圍直到找到最大的最小距離為止。
- 根據定義的
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!
和 2517. Maximum Tastiness of Candy Basket 解題紀錄 完全相同,只是敘述上稍有不同。
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 十六個天亮!
評論
WalineGiscus