LeetCode 🟡 2101. Detonate the Maximum Bombs
🔗 🟡 2101. Detonate the Maximum Bombs 1880
tags: Biweekly Contest 67
DFS
BFS
陣列(Array)
圖(Graph)
幾何(Geometry)
數學(Math)
BitSet
Floyd-Warshall
題意
一個炸彈的爆炸範圍定義為以炸彈為圓心的一個圓。
給定一個二維整數陣列 ,其中 表示第 個炸彈的 x 和 y 座標, 表示爆炸範圍的半徑。
你可以選擇引爆一枚炸彈。當這個炸彈被引爆時,它會引爆所有在其爆炸範圍內的炸彈,這些被引爆的炸彈會進一步引爆它們爆炸範圍內的其他炸彈。
返回在選擇一枚炸彈引爆後下,最多可以引爆的炸彈數量。
思路:DFS
首先考慮要如何定義炸彈之間的關係,如果炸彈 的爆炸範圍包含炸彈 ,則炸彈 可以引爆炸彈 。因此可以使用 有向圖(Directed Graph) 來表示炸彈之間的關係,並使用一個 鄰接表(Adjacency List) 來存儲這個有向圖。
這裡需要注意,炸彈之間的關係是 單向 的,即炸彈 可以引爆炸彈 ,但炸彈 不一定可以引爆炸彈 。故不能使用無向圖來表示炸彈之間的關係。
在得到了有向圖之後,就可以使用 深度優先搜索(DFS) 的方式來計算從每個炸彈開始可以引爆的最大炸彈數量。定義一個遞迴函數 dfs
來進行深度優先搜索。這個函數會從一個炸彈開始,標記其為已訪問,然後遞迴地訪問所有在其爆炸範圍內的炸彈,並累計引爆的炸彈數量。在 DFS 過程中,使用一個陣列 來記錄已經探索過的炸彈,避免重複訪問。
最後,遍歷所有的炸彈,計算其可以引爆的炸彈數量,找到可以引爆的最大炸彈數量,作為最終的答案返回。
複雜度分析
- 時間複雜度:,其中 是炸彈的數量。
- 建立鄰接表的時間複雜度為 ,因為需要檢查每對炸彈之間的關係。
- 每次 DFS 的時間複雜度為 ,且總共需要執行 次 DFS。
- 最壞情況下,每個點之間都有邊相連,都可以引爆其他所有炸彈,因此在訪問到某一個點時,都需要檢查其他所有點,且每個點都會被訪問一次。
- 空間複雜度:。
- 鄰接表的空間複雜度為 。
1 | class Solution: |
1 | class Solution { |
寫在最後
Cover photo is remixed from @吃肥皂泡泡, thanks for their work!
失蹤人口回歸。
本部落格所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 十六個天亮!
評論
WalineGiscus