day31贪心算法 用最少数量的箭引爆气球 和无重叠区间

news2024/11/26 8:47:59

题目描述
在这里插入图片描述
题目分析:
在这里插入图片描述
x轴向上射箭,12一支,重叠的需要一支,3-8一支,7-16一支 返回2;
就是让重叠的气球尽量在一起,局部最优;用一支弓箭,全局最优就是最少弓箭;
如何去寻找重叠的气球?和记录弓箭数?
1.对所有气球排序;(左边界排序如上图);
2. if 如果第i个气球的左边界大于第i-1个气球的右边界;即point[i][0] > point[i-1][1] 比如上图中3 6 的左边界3大于右边界1 2 的右边界2;那么弓箭数++;
3.else 就是重叠 右边界取最小值;
在这里插入图片描述
如图36 48重叠,右边界取6 8 的最小值6作为重叠的右边界;
else 逻辑: a: 更新右边界;points[i][1] = min(points[i-1][1] ,points[i][1] );
b:拿这个右边界和下一个气球比较;

int cmp(const void *a, const void *b)
{
    int *x = *(int **)a;
    int *y = *(int **)b;
    if (x[0] == y[0]) {
        return x[1] > y[1];
    }
    return x[0] > y[0];
}

int findMinArrowShots(int** points, int pointsSize, int* pointsColSize){

    //将points数组作升序排序
    qsort(points, pointsSize, sizeof(points[0]),cmp);
    
    int arrowNum = 1;
    int i = 1;
    for(i = 1; i < pointsSize; i++) {
        //若前一个气球与当前气球不重叠,证明需要增加箭的数量
        if(points[i][0] > points[i-1][1])
            arrowNum++;
        else
            //若前一个气球与当前气球重叠,判断并更新最小的x_end
            points[i][1] = fmin(points[i-1][1] ,points[i][1] );
    }
    return arrowNum;
}

题目描述
在这里插入图片描述
分析:
左边界排序,
if nums[i][0] >= nums[i-1][1] i的左边界大于i-1的右边界表示没有重叠;
else 重叠 cnt++; 右边界也是取最小值,和上一题一样; nums[i][1] = min(nums[i-1][1],nums[i][1]);

代码一

int cmp(const void *a, const void *b)
{
    int *x = *(int **)a;
    int *y = *(int **)b;
    if (x[0] == y[0]) {
        return x[1] > y[1];
    }
    return x[0] > y[0];
}

int eraseOverlapIntervals(int** intervals, int intervalsSize, int* intervalsColSize){
    // 贪心算法
    if (intervalsSize == 0) {
        return 0;
    }
    // end递增排序
    qsort(intervals, intervalsSize, sizeof(int *),cmp);
    int count = 0;
    for (int i = 1; i < intervalsSize; i++) { // i 和 i-1
        if (intervals[i][0] < intervals[i-1][1]) {
           //重叠
           count++;
           //后面区间和当前区间是否重叠 更新右边界
           intervals[i][1] = fmin(intervals[i][1], intervals[i-1][1]);

        }
    }
    // 返回重复区间数
    return count;
}

代码二

int cmp(const void *pa, const void *pb)
{
    return (*(int**)pa)[1] - (*(int**)pb)[1];
}

int eraseOverlapIntervals(int** intervals, int intervalsSize, int* intervalsColSize){
    // 贪心算法
    if (intervalsSize == 0) {
        return 0;
    }
    // end递增排序
    qsort(intervals, intervalsSize, sizeof(int*), cmp);

    int x_end = intervals[0][1];
    int start;
    int count = 1;
    for (int i = 1; i < intervalsSize; i++) {
        start = intervals[i][0];
        if (start >= x_end) {
            // 不相交
            count++;
            // 更新不重复区间end
            x_end = intervals[i][1];
        }
    }
    // 返回重复区间数
    return intervalsSize - count;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/778523.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ShardingSphere分库分表实战之MySQL主从集群搭建

&#x1f680; ShardingSphere &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&…

uniapp 微信小程序 uni.modal弹框+content内容自定义(内容换行)

效果图&#xff1a; 1、template <view click"showPriceDialog"></view>2、data data() {return {contentText:"",} },3、methods // 价格公示 showPriceDialog: function() {// 吨let minPriceTon 1900let maxPriceTon 3895// 袋let …

23.多项式与非多项式曲线拟合对比(matlab程序)

1.简述 拟合标准&#xff1a; (1)原始数据向量与拟合向量之间的距离最小&#xff0c;该距离的度量一般使用误差平方和表示&#xff0c;即均方误差&#xff1a;R||Q-Y||22 (2)当均方误差最小时&#xff0c;说明构造的拟合向量与原始向量最为接近&#xff0c;这种曲线拟合的方法…

sql中group by 的使用

1、概述 Group By 从字面意义上理解就是根据By指定的规则对数据进行分组&#xff0c;所谓的分组就是将一个数据集划分为若干个小区域&#xff0c;然后针对若干个小区域进行数据处理 2、原始表 3、简单的Group By 示例1 select 类别&#xff0c;数量 as 数量之和 from A gro…

easyui Uncaught TypeError: Cannot read properties of null (reading ‘width‘)

问题描述 在将easyui1.3.6版本替换为1.7版本的时候。只有表头显示出来了&#xff0c;内容并没有显示出来&#xff0c;且报异常。表头也没有按照期望的宽度正常显示。错误提示如下 问题原因及解决办法 该问题出现的原因是因为该表格的表头涉及到跨行跨列问题&#xff0c;原因…

2023年国际高校数学建模竞赛A题:购物网站的数据分析

数据处理&#xff1a; Appendix II的词频统计和数据可视化&#xff1a; 代码: 代码注释完美&#xff0c;可直接运行&#xff0c;简单易用&#xff0c;不懂可以直接问我&#xff0c;在线答疑。 四个题目的代码获取&#xff1a; 可直接运行代码 可直接运行代码 可直接运行…

小程序自定义步骤条实现

效果展示&#xff1a; 支持背景颜色自定义 <view class"hl_steps"><view class"hl_steps_item" wx:for"{{steps}}" wx:key"id"><view class"hl_steps_item_circle_out" style"background-color: {{col…

数据可视化——如何绘制地图

文章目录 前言如何绘制地图添加配置项 根据已有数据绘制地图整体代码展示 前言 前面我们学习了如何利用提供的数据来对数据进行处理&#xff0c;然后以折线图的形式展现出来&#xff0c;那么今天我将为大家分享如何将提数据以地图的形式展现。 如何绘制地图 前面我们绘制折线…

Flutter动画库:animations(路由过渡动画或者页面切换动画)

animations animations 是一个 Flutter 库&#xff0c;它提供了一组用于创建动画效果的工具和组件。这个库的核心重点是路由过渡动画或者页面切换动画 地址 https://pub-web.flutter-io.cn/packages/animations 安装 flutter pub add animations看了下官方文档和官方例子&a…

编程规范—代码风格

先看以下两段代码。 对于计算机来说&#xff0c;这两段代码并没有什么区别&#xff0c;都可以执行&#xff0c;执行结果也一样。但是对于我们人类来说&#xff0c;第二段代码显然看起来更舒适&#xff0c;程序的可读性也更强&#xff0c;跟写作文类似&#xff0c;把所有内容挤在…

RocksDB架构

1、rocksdb是什么? RocksDB中文网 | 一个持久型的key-value存储 rocksdb是一种KV存储引擎&#xff0c;常用于数据库存储数据&#xff0c;无法直接使用&#xff0c;没有提供sql命令&#xff0c;通过调用rocksdb提供的api进行数据库的读写等操作。 rocksdb是以leveldb为基础开…

WinCE OSDesign项目创建模拟器

vs2005创建OSDesign项目&#xff0c;WinCE6 1.解决方案管理器&#xff0c;项目鼠标右键属性 默认语言设置 编译选项 2.主菜单&#xff1a;Target->Connectivity Options Add Device/Remove Device不用管 Kernel Service Map Core Service Settings默认 Service Status默…

网络安全(黑客)自学路线笔记

一、什么是黑客&#xff1f; 黑客泛指IT技术主攻渗透窃取攻击技术的电脑高手&#xff0c;现阶段黑客所需要掌握的远远不止这些。 二、为什么要学习黑客技术&#xff1f; 其实&#xff0c;网络信息空间安全已经成为海陆空之外的第四大战场&#xff0c;除了国与国之间的博弈&am…

企业微信在ios机型无法吊起打开个人信息页接口(openUserProfile)

wx.qy.openUserProfile({type: 1,//1表示该userid是企业成员&#xff0c;2表示该userid是外部联系人userid: "wmEQlEGwAAHxbWYDOK5u3Af13xlYAAAA", //可以是企业成员&#xff0c;也可以是外部联系人success: function(res) {// 回调} });遇到的问题&#xff1a;调用打…

flutter开发实战-实现推送功能Push Notification

flutter开发实战-实现推送功能Push Notification 推送服务现在可以说是所有 App 的标配了&#xff0c;最近在Flutter工程项目上实现推送功能。flutter上实现推送功能需要依赖原生的功能&#xff0c;需要插件实现&#xff0c;这里使用的是极光推送的服务。 一、效果图 效果图…

整车总线系列——FlexRay 七

整车总线系列——FlexRay 七 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 没有人关注你。也无需有人关注你。你必须承认自己的价值&#xff0c;你不能…

swagger对json数据的处理

在实习中遇到了一个不寻常的事情&#xff0c;今天和同事讨论一个小问题&#xff0c;同事使用swagger&#xff0c;想要调用一个接口&#xff0c;这个接口要传递一个json对象&#xff0c;对应java的一个实体类&#xff0c;但是有一个属性同事不想看到它&#xff0c;就用JsonIgnor…

主从复制 [学习笔记] MaterSlave

文章目录 前言MySQL主从复制的实战案例1、环境搭建2、主库配置&#xff0c;进入vim /etc/my.cnf3、重启数据库4、建立同步账号5、锁表设置只读6、设置主库状态7、备份数据库资料8、解锁9、主库备份数据上传到从库10、slave从库设置11、还原数据的备份12、设定从主库同步 前言 …

物流智能搬运机器人|HEGERLS四向穿梭车在复杂生产场景下的智能化作业应用

一般而言&#xff0c;物流有三个基本环节&#xff1a;存取、输送和分拣。在存取环节&#xff0c;常用方式有两种&#xff1a;托盘存取和料箱存取。以前托盘存取应用得多一些&#xff0c;但随着电商、新零售的兴起&#xff0c;B2b、B2C业务快速增长&#xff0c;订单碎片化趋势明…

ripv2小实验

子网划分 192.168.1.0/24&#xff1a; 192.168.1.0/26 192.168.1.64/26 192.168.1.128/26 192.168.1.192/26 192.168.1.0/26划分为 192.168.1.0/26 192.168.1.4/26 192.168.1.8/26 192.168.1.12/26 192.168.1.16/26 192.168.1.20/26 192.168.…