LeetCode452. Minimum Number of Arrows to Burst Balloons

文章目录

一、题目

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.

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].

Constraints:

1 <= points.length <= 105

points[i].length == 2

-231 <= xstart < xend <= 231 - 1

二、题解

cpp 复制代码
class Solution {
public:
    static bool cmp(vector<int>& a,vector<int>& b){
        return a[0] < b[0];
    }
    int findMinArrowShots(vector<vector<int>>& points) {
        int n = points.size();
        //按左边界从小到大排序
        sort(points.begin(),points.end(),cmp);
        int res = 1;
        for(int i = 1;i < n;i++){
            //如果当前气球左边界大于上一个气球的右边界
            if(points[i][0] > points[i-1][1]) res++;
            //如果重合,则更新右端点值
            else points[i][1] = min(points[i][1],points[i-1][1]);
        }
        return res;
    }
};
相关推荐
愈努力俞幸运11 分钟前
c++ 头文件
开发语言·c++
~山有木兮23 分钟前
C++设计模式 - 单例模式
c++·单例模式·设计模式
蒟蒻小袁29 分钟前
力扣面试150题--被围绕的区域
leetcode·面试·深度优先
十五年专注C++开发35 分钟前
CMake基础:gcc/g++编译选项详解
开发语言·c++·gcc·g++
MSTcheng.41 分钟前
【数据结构】顺序表和链表详解(下)
数据结构·链表
Q8137574601 小时前
中阳视角下的资产配置趋势分析与算法支持
算法
yvestine1 小时前
自然语言处理——文本表示
人工智能·python·算法·自然语言处理·文本表示
HUN金克斯1 小时前
C++/C函数
c语言·开发语言·c++
慢半拍iii1 小时前
数据结构——F/图
c语言·开发语言·数据结构·c++
GalaxyPokemon1 小时前
LeetCode - 148. 排序链表
linux·算法·leetcode