Minimum Number of Arrows to Burst Balloons LeetCode Solution

Difficulty Level Medium
Frequently asked in Amazon Apple Bloomberg Facebook Flipkart Goldman Sachs Google Microsoft Swiggy Uber
Walmart Global techViews 92

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] = [xstart, xend] denotes a balloon whose horizontal diameter stretches between xstart and xend. 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 xstart and xend is burst by an arrow shot at x if xstart <= x <= xend. 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.

Given the array points, return the minimum number of arrows that must be shot to burst all balloons.

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:

Translate »