当前位置: 首页 > news >正文

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

有一些球形气球贴在一堵用 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;

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

相关文章:

  • JAVA Synchronized对象锁和类锁区别(牛逼)
  • 24.3 分布式综合应用
  • AWTK-MODBUS 服务器
  • 阿里云ECS服务器安装java环境相关软件
  • 6个免费的ChatGPT网站
  • 常用的6个的ChatGPT网站,国内可用!
  • Docker搭建LNMP环境实战(一):前言
  • 基于python+vue 的一加剧场管理系统的设计与实现flask-django-nodejs-php
  • 服务器感染了.kat6.l6st6r勒索病毒,如何确保数据文件完整恢复?
  • 平衡隐私与效率,Partisia Blockchain 解锁数字安全新时代
  • Vscode初建Vue时几个需要注意的问题
  • 数据结构面试常见问题
  • 【Caddy】Caddy实践2——ubuntu下解决Caddy管理端点端口被占用的问题
  • 现在阿里云云服务器租用多少钱?一张表,报价单
  • 计算机视觉任务不能或缺的库opencv简单介绍和概述
  • 如何用VSCode和Clangd与Clang-Format插件高效阅读Linux内核源码及写驱动
  • Linux系统之jq工具的基本使用
  • 【OpenSSH】Windows系统使用OpenSSH搭建SFTP服务器
  • 数据结构:详解【栈和队列】的实现
  • 贪心算法(算法竞赛、蓝桥杯)--奶牛晒衣服
  • 马上评丨全民定制公交,打开城市出行想象空间
  • 白宫启动“返乡计划” ,鼓励非法移民自愿离开美国
  • 央行:中国政府债务扩张仍有可持续性
  • 85后清华博士黄佐财任湖北咸宁市咸安区委副书记、代区长
  • 国家主席习近平抵达莫斯科
  • 多个“网约摩托车”平台上线,工人日报:安全与监管不能掉队