###### tags: `LeetCode`,`Python3`,`Medium` # 452. Minimum Number of Arrows to Burst Balloons ### **題目連結:** [**Minimum Number of Arrows to Burst Balloons**](https://leetcode.com/problems/minimum-number-of-arrows-to-burst-balloons/description/?envType=daily-question&envId=2024-03-18) ### **解題方向** * points參數為二維陣列,每個子陣列都代表一個圓型氣球的最左及最右的x軸位置(直徑) * 若你可以選定一個x位置投擲箭矢射中氣球則arrows+1,本題要求使用「最少數量」的箭矢 * 排序: * 先講二維陣列以子陣列的第一個值來進行由小到大排序 * 貪婪法: * 從第一個氣球開始,射出一箭,然後看看這支箭能射中多少氣球 * 檢查下一個氣球的起始位置是否在目前箭能達到的最遠距離內(即前一個氣球的結束位置) * 如果是,那麼這個氣球也可以被目前這支箭射中。 * 我們更新能被這支箭射中的氣球的最遠距離為「當前氣球的結束位置和已射中的氣球的最遠距離的最小值」(更新end值) * 如果不是,我們就需要另外一支箭,然後繼續重複此演算法(當作end值替換為目前氣球右邊的x) ### **完整程式碼** ```Python= class Solution: def findMinArrowShots(self, points: List[List[int]]) -> int: points.sort(key=lambda x:x[0]) arrows=1 end=points[0][1] for b in points[1:]: if b[0]>end: arrows+=1 end=b[1] else: end=min(end,b[1]) return arrows ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up