-
Notifications
You must be signed in to change notification settings - Fork 57
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
feat: add minimum-number-of-arrows-to-burst-balloons
Change-Id: I938311de832bdb93b3ffd95d1add3ebe57c8efd5
- Loading branch information
1 parent
60b906a
commit 31fbb53
Showing
2 changed files
with
54 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
53 changes: 53 additions & 0 deletions
53
algorithms/minimum-number-of-arrows-to-burst-balloons/Solution.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
""" | ||
There are some spherical balloons spread in two-dimensional space. For each balloon, provided input is the start and end coordinates of the horizontal diameter. Since it's horizontal, y-coordinates don't matter, and hence the x-coordinates of start and end of the diameter suffice. The start is always smaller than the end. | ||
An arrow can be shot up exactly vertically from different points along the x-axis. A balloon with xstart and xend bursts by an arrow shot at x if xstart ≤ x ≤ xend. There is no limit to the number of arrows that can be shot. An arrow once shot keeps traveling up infinitely. | ||
Given an array points where points[i] = [xstart, xend], return the minimum number of arrows that must be shot to burst all balloons. | ||
Example 1: | ||
Input: points = [[10,16],[2,8],[1,6],[7,12]] | ||
Output: 2 | ||
Explanation: One way is to shoot one arrow for example at x = 6 (bursting the balloons [2,8] and [1,6]) and another arrow at x = 11 (bursting the other two balloons). | ||
Example 2: | ||
Input: points = [[1,2],[3,4],[5,6],[7,8]] | ||
Output: 4 | ||
Example 3: | ||
Input: points = [[1,2],[2,3],[3,4],[4,5]] | ||
Output: 2 | ||
Example 4: | ||
Input: points = [[1,2]] | ||
Output: 1 | ||
Example 5: | ||
Input: points = [[2,3],[2,3]] | ||
Output: 1 | ||
Constraints: | ||
0 <= points.length <= 104 | ||
points.length == 2 | ||
-231 <= xstart < xend <= 231 - 1 | ||
""" | ||
|
||
|
||
class Solution: | ||
def findMinArrowShots(self, points: List[List[int]]) -> int: | ||
points.sort(key=lambda x:(x[1],x[0])) | ||
prev, ret = None, 0 | ||
for p in points: | ||
if prev is None: | ||
prev = p[1] | ||
ret += 1 | ||
continue | ||
if prev < p[0]: | ||
prev = p[1] | ||
ret += 1 | ||
return ret |