Table of Contents
Problem Statement:
Minimum Number of Arrows to Burst Balloons LeetCode Solution: There are some spherical balloons taped onto a flat wall that represents the XY-plane. The balloons are represented as a 2D integer array points
where points[i] = [x
start, x
end]
denotes a balloon whose horizontal diameter stretches between x
start and x
end. You do not know the exact y-coordinates of the balloons.
Arrows can be shot up directly vertically (in the positive y-direction) from different points along the x-axis. A balloon with x
start and x
end is burst by an arrow shot at x
if x
start <= x <= x
end. There is no limit to the number of arrows that can be shot. A shot arrow keeps traveling up infinitely, bursting any balloons in its path.
Given the array points
, return the minimum number of arrows that must be shot to burst all balloons.
Examples:
Example 1:
Input:
points = [[10,16],[2,8],[1,6],[7,12]]
Output:
2
Explanation:
The balloons can be burst by 2 arrows: - Shoot an arrow at x = 6, bursting the balloons [2,8] and [1,6]. - Shoot an arrow at x = 11, bursting the balloons [10,16] and [7,12].
Example 2:
Input:
points = [[1,2],[3,4],[5,6],[7,8]]
Output:
4
Explanation:
One arrow needs to be shot for each balloon for a total of 4 arrows.
Example 3:
Input:
points = [[1,2],[2,3],[3,4],[4,5]]
Output:
2
Explanation:
The balloons can be burst by 2 arrows: - Shoot an arrow at x = 2, bursting the balloons [1,2] and [2,3]. - Shoot an arrow at x = 4, bursting the balloons [3,4] and [4,5].
Approach:
Idea:
The problem can be solved with the help of sorting. We will sort all the balloons based on their first index. Starting from the first balloon we will iterate over the entire list. At each iteration, we will check whether the balloon can be burst with the current arrow or not by checking if its end is within the range or not. If yes, we will reassign the top with the minimum value, else if no, then we will assign a new arrow for the current balloon. Check out the code for a better understanding.
Code:
Minimum Number of Arrows to Burst Balloons C++ Solution:
class Solution { public: int findMinArrowShots(vector<vector<int>>& points) { int n=points.size(); sort(points.begin(),points.end()); int ans=1; int top = points[0][1]; for(int i=1;i<n;i++){ if(points[i][0]<=top){ top = min(top,points[i][1]); } else{ top=points[i][1]; ans++; } } return ans; } };
Minimum Number of Arrows to Burst Balloons Python Solution:
class Solution: def findMinArrowShots(self, points: List[List[int]]) -> int: n = len(points) points.sort() ans = 1 top = points[0][1] for i in range(1,n): if points[i][0]<=top: top = min(top,points[i][1]) else: top=points[i][1] ans += 1 return ans
Complexity Analysis of Minimum Number of Arrows to Burst Balloons LeetCode Solution:
- Time Complexity: The time complexity of the above code is O(nlogn).
- Space Complexity: The space complexity of the above code is O(1).