首页 > 编程语言 >【C++】每日一题 452 用最少数量的箭引爆气球

【C++】每日一题 452 用最少数量的箭引爆气球

时间:2024-03-24 20:34:19浏览次数:26  
标签:end int 452 C++ points xstart xend 气球

有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points ,其中points[i] = [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。

一支弓箭可以沿着 x 轴从不同点 完全垂直 地射出。在坐标 x 处射出一支箭,若有一个气球的直径的开始和结束坐标为 xstart,xend, 且满足 xstart ≤ x ≤ xend,则该气球会被 引爆 。可以射出的弓箭的数量 没有限制 。 弓箭一旦被射出之后,可以无限地前进。

给你一个数组 points ,返回引爆所有气球所必须射出的 最小 弓箭数 。

if (points.empty()) {
        return 0;
    }

    sort(points.begin(), points.end(), [](const vector<int>& a, const vector<int>& b) {
        return a[1] < b[1]; // 按照右边界排序
    });

    int arrows = 1;
    int end = points[0][1];

    for (int i = 1; i < points.size(); i++) {
        if (points[i][0] > end) {
            arrows++;
            end = points[i][1];
        }
    }

    return arrows;
}

int main() {
    vector<vector<int>> points = {{10, 16}, {2, 8}, {1, 6}, {7, 12}};

    int minArrows = findMinArrowShots(points);

    cout << "Minimum number of arrows needed: " << minArrows << endl;

    return 0;

首先对气球数组按照右边界进行排序,然后从左到右遍历气球,如果当前气球的左边界大于之前记录的最小右边界,说明需要新增一支箭,并更新最小右边界。最终返回所需的箭的数量

标签:end,int,452,C++,points,xstart,xend,气球
From: https://blog.csdn.net/ZSZ_shsf/article/details/136951379

相关文章

  • 初识C++(二)引用,内联函数,auto
    目录1.引用的概念与用法:1.1引用特性:1.2使用场景    1.2.1做参数1.3传值、传引用效率比较1.4引用做返回值1.5引用和指针的对比2.内联函数3.auto关键字4.基于范围的for循环(C++11)5.指针空值nullptr(C++11)1.引用的概念与用法:    引用是一个重要的......
  • 代码解析 C++ 的语法难点
    C++是一种强大的编程语言,它提供了丰富的语法特性,但也带来了相应的语法难点。本文将深入解析C++中一些常见的语法难点,并提供清晰的解释和示例,帮助读者深入理解C++的语法。1.指针和引用指针和引用都是C++中处理内存地址的强大工具,但它们也容易混淆。指针指向内存地......
  • 第十二届蓝桥杯省赛C&C++ 研究生组
    十二届省赛题第十二届蓝桥杯省赛C&C++研究生组-卡片第十二届蓝桥杯省赛C&C++研究生组-直线第十二届蓝桥杯省赛C&C++研究生组-货物摆放第十二届蓝桥杯省赛C&C++研究生组-路径第十二届蓝桥杯省赛C&C++研究生组-时间显示第十二届蓝桥杯省赛C&C++研究生组-砝码称重......
  • C++ 的标准模板库(STL)常用容器介绍
    C++的标准模板库(STL)提供了丰富的容器类来帮助开发者管理和存储数据。下面我将介绍C++中常用的STL容器,并且为每个容器提供一个简单的示例来说明其基本用法。1.vector(向量)#include<iostream>#include<vector>intmain(){std::vector<int>vec;//添加元......
  • 安装Visual Studio2015后找不到C++项目模板解决办法
    安装VisualStudio2015后找不到C++项目模板解决办法:方法1:您可以通过修改VisualStudio来完成此操作,并且可以使用以下步骤完成此操作:1、转到“添加或删除程序”对话框中的“控制面板”;2、选择要修复的产品,然后单击“安装向导”,单击“Next;3、单击“repair。方法2:您可以通过以下......
  • 【C++】Linux多线程开发
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录3.1线程概述3.2创建线程3.3、线程终止3.4连接已经终止线程3.5线程的分离3.6线程取消3.7线程属性3.8线程同步3.9互斥锁3.10死锁3.11读写锁3.12生产者和消费者模型3.13条件......
  • 【每周例题】力扣 c++ 自除数
    自除数题目 题目分析1.这道题可以直接用暴力求解,动用for循环遍历从left到right的每个数,使用while判断是否为自除数。2.满足自除数有两个要求:1.数位不能存在0;2.自除数除于数位为0;这里可以使用if语句进行判断。3.由于自除数的数量位置,所以存储自除数可以采用容器或者数列来存......
  • 【每周例题】力扣 c++ 各位相加
    各位相加题目各位相加 题目解析这个题目看似需要使用递归方法或者使用while循环进行求解,其实你只需要统计前三十个数就可以发现规律:  根据图表可知,除了数字0,其他数字各位相加的最后结果都是其数字对9取模。所以从这个结果可以得到以下代码代码#include<iostream>u......
  • 数据结构/C++:位图 & 布隆过滤器
    数据结构/C++:位图&布隆过滤器位图实现应用布隆过滤器实现应用哈希表通过映射关系,实现了O(1)的复杂度来查找数据。相比于其它数据结构,哈希在实践中是一个非常重要的思想,本博客将介绍哈希思想的两大应用,位图与布隆过滤器。位图看到以下题目:给40亿个无序不重......
  • C++创建异步任务
    namespaceCore{/***创建一个异步任务的包装函数,返回一个指向std::packaged_task的shared_ptr。**@tparamF函数类型*@tparamArgs参数类型*@paramf要执行的函数*@paramargs函数的......