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

题目描述
在这里插入图片描述
题目分析:
在这里插入图片描述
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;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

猿人学第二题—混淆 动态cookie检测

猿人学第二题—混淆 动态cookie检测 1、代码格式化检测2、检测global和navigator.vendorSub3、检测setInterval思考 4、console.log输出检测补环境 简单的document.cookie&#xff0c;location.reload等就不写了 1、代码格式化检测 这里应该是利用了字符串正则匹配性能低的特点…

软考高项(五)信息系统工程 ★重点集萃★

&#x1f451; 个人主页 &#x1f451; &#xff1a;&#x1f61c;&#x1f61c;&#x1f61c;Fish_Vast&#x1f61c;&#x1f61c;&#x1f61c; &#x1f41d; 个人格言 &#x1f41d; &#xff1a;&#x1f9d0;&#x1f9d0;&#x1f9d0;说到做到&#xff0c;言出必行&am…

如何解决创建vue项目后没有webpack.config.js(vue.config.js)文件

◼️ webpack.config.js文件没有的原因 Vue 项目中 vue.config.js 文件就等同于 webpack 的 webpack.config.js。 vue-cli3 之后创建的时候并不会自动创建 vue.config.js&#xff0c;因为这个是个可选项&#xff0c;所以一般都是需要修改 webpack 的时候才会自己创建一个 vue…

什么是PostgreSQL?简要介绍其主要特点和用途

PostgreSQL是一种开源的关系型数据库管理系统&#xff08;DBMS&#xff09;&#xff0c;它是最强大和广泛使用的开源数据库之一。PostgreSQL的名称起源于其前身&#xff0c;称为"Ingres"项目&#xff0c;后来被命名为Postgres&#xff0c;而PostgreSQL则是它的进一步…

目录操作在C语言中:一个全面的指南

(꒪ꇴ꒪ ),hello我是祐言博客主页&#xff1a;C语言基础,Linux基础,软件配置领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff01;送给读者的一句鸡汤&#x1f914;&#xff1a;集中起来的意志可以击穿顽石!作者水平很有限&#xff0c;如果发现错误&#x…

指针进阶(三)

指针进阶&#xff08;三&#xff09; 指针习题组&#xff1a; 01&#xff1a; int main() {int a[5] { 1, 2, 3, 4, 5 };int *ptr (int *)(&a 1);printf( "%d,%d", *(a 1), *(ptr - 1));return 0; }运行结果&#xff1a; 原因&#xff1a;这里a是数组名&a…

Linux:centos7:zabbix4.0(安装,监控》Linux》Windows》网络设备)

环境 centos7&#xff08;zabbix服务器&#xff09;内网ip&#xff1a;192.168.254.11 外网ip&#xff1a;192.168.0.188&#xff08;去网络yum源下载&#xff09; centos7&#xff08;被监控端&#xff09;内网ip&#xff1a;192.168.254.33win10&#xff08;被监控端&…

【后端面经】微服务构架 (1-3) | 熔断:抖抖抖不停?微服务熔断策略让你的系统稳如泰山!

文章目录 一、前置知识1、什么是熔断?2、什么是限流?3、什么是降级?4、怎么判断微服务出现了问题?A、指标有哪些?B、阈值如何选择?C、超过阈值之后,要不要持续一段时间才触发熔断?5、服务恢复正常二、面试环节1、面试准备2、面试基本思路三、总结 在微服务构架中…

Java版本工程项目管理系统源码-全面的工程项目管理

​ ​工程项目管理系统是指从事工程项目管理的企业&#xff08;以下简称工程项目管理企业&#xff09;受业主委托&#xff0c;按照合同约定&#xff0c;代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 如今建筑行业竞争激烈&#xff0c;内卷严重&#xff0c;…

ADCS知识点全收录! 如何利用证书服务器对域控进行多角度攻击(上)

在2021年的BlackHat大会上&#xff0c;由Will Schroeder和Lee Christensen发布了关于Active Directory Certificate Services 利用白皮书《Certified Pre-Owned - Abusing Active Directory Certificate Services》&#xff0c;其中包含了大量的针对ADCS的攻击手法&#xff0c;…

JavaFx实现自定义窗口

效果 代码 package cn.juhe.zjsb.task;import javafx.application.Application; import javafx.geometry.Insets; import javafx.geometry.Rectangle2D; import javafx.scene.Cursor; import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.scene.image…

【Nodejs】文件上传

1.初始化准备 1.1 安装依赖 首先创建一个express-multer-upload工程项目&#xff0c;然后在项目中下好各种依赖包。 multer中间件 Multer 是一个 node.js 中间件&#xff0c;用于处理 multipart/form-data 类型的表单数据&#xff0c;它主要用于上传文件。 注意: Multer 不会…

【Ajax】笔记-JQuery发送请求与通用方法

Get请求 语法格式&#xff1a; $.get(url, [data], [callback], [type]) url:请求的 URL 地址。data:请求携带的参数。callback:载入成功时回调函数。type:设置返回内容格式&#xff0c;xml, html, script, json, text, _default。 准备三个按钮分别测试Get 、Post、通用型方…

概率论的学习和整理21:用EXCEL来做假设检验(未完成草稿)

目录 1 EXCEL可以用来做假设检验 1.1 如何打开 数据分析 和 规划求解 1.2 EXCEL里关于正态分布的准备知识 2 基本的假设检验 2.1 最基本的假设检验&#xff0c;单边的Z检验 2.1 双样本F检验 2.1.1 例题 2.1.2 进行F检验之前需要满足一些假设条件 2.1.3 计算步骤 2.1…

Langchain 新手完全指南

原文&#xff1a;Langchain 新手完全指南 Langchain 可能是目前在 AI 领域中最热门的事物之一&#xff0c;仅次于向量数据库。 它是一个框架&#xff0c;用于在大型语言模型上开发应用程序&#xff0c;例如 GPT、LLama、Hugging Face 模型等。 它最初是一个 Python 包&#x…

实战攻防Demo|如何轻松形成自动响应的安全闭环?

从威胁阻断角度来说&#xff0c;拦住黑客的第一步攻击尤为重要。同样&#xff0c;对于攻击者来说&#xff0c;第一步攻击的成本也往往是最高的。日常工作中人们会遇到很多类型的攻击&#xff0c;但暴力破解或者撞库攻击往往被作为黑客的第一步攻击。这主要源于其技术含量低&…

【网络教程】如何快速的解决WordPress“另一更新正在进行”的问题

文章目录 WordPress提示“另一更新正在进行”解决方案手动删除数据库记录使用插件WordPress提示“另一更新正在进行” 当我们在更新WordPress的插件或者升级WordPress时会出现后台提示“另一更新正在进行”,如下图 当我们点击更新后,出现下图提示 出现上述问题是由于在升级Wo…

平板用的触控笔什么牌子好?ipad第三方电容笔推荐

随着技术的发展&#xff0c;出现了各种各样的平板电容笔。一支好的电容笔&#xff0c;不但可以极大地提升我们的工作效率&#xff0c;还可以极大地提升我们的学习效果。平替的电容笔&#xff0c;无论是在技术方面&#xff0c;还是在质量方面&#xff0c;都还有很大的提升空间&a…

在家下载论文使用哪些论文下载工具比较好

在家下载论文如果不借助论文下载工具是非常艰难的事情&#xff0c;因为很多查找下载论文的数据库都是需要账号权限才可使用的。 例如&#xff0c;我们查找中文论文常用的知网、万方等数据库以及众多国外论文数据库。 在家下载知网、万方数据库论文可用下面的方法&#xff1a;…

Apache pulsar 技术系列-- 消息重推的几种方式

导语 Apache Pulsar 是一个多租户、高性能的服务间消息传输解决方案&#xff0c;支持多租户、低延时、读写分离、跨地域复制&#xff08;GEO replication&#xff09;、快速扩容、灵活容错等特性。在很多场景下&#xff0c;用户需要通过 MQ 实现消息的重新推送能力&#xff0c…