贪心-区间问题——acwing

题目一:最大不相交区间数量

908. 最大不相交区间数量 - AcWing题库

分析

跟区间选点一样。区间选点:贪心——acwing-CSDN博客

代码

#include<bits/stdc++.h>
using namespace std;const int N = 1e5+10;struct Range {int l, r;// 重载函数bool operator < (const Range &W) const {return r < W.r;}
} range[N];int main() {int n;cin >> n;for(int i = 0; i < n; i ++) {int l, r;cin >> l >> r;range[i] = {l,r};}// sort右端点 // range里边有重载函数定义sort(range, range + n);// 选点每次选 右端点,因为按右端点排序,可以可以尽可能覆盖多个区间,// 选右端点就是局部最优的体现int res = 0, end = -2e9;// 枚举区间 一一判断选点(已覆盖直接pass,没覆盖则更新,选局部最优解点)for(int i = 0; i < n; i ++) {//当前左区间 选点值if(range[i].l > end) {res ++; // 选点+1end = range[i].r; //更新为当前右区间}}cout << res << endl;return 0;
}

题目二:区间分组

906. 区间分组 - AcWing题库

分析

首先用一个二维数组将 区间左右端点存起来。这是数据的存储结构

对左端点排序。

贪心:

每次取所有集合中最小的右端点 与 当前区间左端点比较,如果左端点小于说明可以放入结合,也就是更新该集合的右端点。否则,多一个集合,直接入堆。

用小根堆来维护所有集合,因为贪心每次取最小,所以用小根堆维护所有结合的最右端点。

其实就是两个思考,

  1. 一是如何存储区间
  2. 二是如何解决问题

核心问题通过贪心来解决,按左端点排序

因为涉及最值,用小根堆来存储集合,维护集合。每个集合只需要存储每个集合的有端点。每次都用最小的来比较,这样可以更区间分组更密集,同时如果最小的都不行,那更大的也不行,会有交集,就需要另开集合。

代码

#include<bits/stdc++.h>
using namespace std;vector<vector<int>> a(100010,vector<int> (2,0)); 
int n;int main() {cin >> n;for(int i = 0; i < n; i ++) {int l, r;cin >> l >> r;a[i][0] = l, a[i][1] = r;}sort(a.begin(),a.begin()+n); // 最左端点排序// 小根堆,存所有集合的右端点,集合大小就是priority_queue<int,vector<int>,greater<int>> s;//遍历区间for(int i = 0; i < n; i ++) {//集合中 最小 右端点 都比 左端点; 入队多一个集合if(s.empty() || s.top() >= a[i][0]) s.push(a[i][1]);else { // 当前左端点大,更新最小右端点s.pop();s.push(a[i][1]);}}// 因为用小根堆,存储每一个集合的最后区间右端点,故右端点个数也是集合个数也是组数。cout << s.size() << endl;return 0;
}

题目三:区间覆盖

907. 区间覆盖 - AcWing题库

 

分析

考虑,区间存储结构,排序左端点,可以使用二维数组,排序右端点可以考虑结构体,加个重载<

解决核心问题:从存储的区间里挑选尽可能少的区间来覆盖一段区间。 那么首先左端点需要比该区间左端点<=才能做到覆盖。如果不行,就无解。然后还要在众多左端点比该区间左端点区间小的区间,使得该区间尽可能被覆盖多点(贪心思想体现)。即选右端点最大的,选完,待覆盖区间左端点为被选区间右端点,因为被覆盖了。重复挑选上述步骤,直至使得区间被覆盖,(能覆盖)或者区间遍历完,但仍为未覆盖。也就是无解。

综上所述:

两个边界点。第一个是待覆盖区间左端点,如果所能选区间里没有能覆盖的,(r < st) 那么无解。

第二个边界点。如果待覆盖区间被覆盖完(r>=ed)问题解决。或者,区间遍历完,仍不能使得完全被覆盖,则无解。

代码 

也可以用结构体弄个重载函数来实现区间存储和sort

#include<bits/stdc++.h>
using namespace std;const int N = 1e5+10;
// 二位数组存储区间
vector<vector<int>> a(N,vector<int>(2,0));int main() {int st, ed;cin >> st >> ed;int n;cin >> n;for(int i = 0; i < n; i ++) {int l, r;cin >> l >> r;a[i][0] = l, a[i][1] = r;}//对左端点排序sort(a.begin(),a.begin()+n);int flag = 0, cnt = 0;for(int i = 0; i < n; i ++) {// 贪心:找<=要覆盖区间左端点,右端点覆盖能最大化的int j = i, r = -2e9;while(j < n && a[j][0]<=st) {r = max(r,a[j][1]);j ++;}// 覆盖不下去了,判断左边界if(r<st) {break;}// 找到一个区间覆盖一次。cnt ++;//判断 右边界if(r >= ed) {flag = 1;break;}//区间收缩st = r;i = j-1; // i结束循环会自增}if(flag) cout << cnt << endl;else cout << -1 << endl;return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】字符串左旋的三种解题方法详细分析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C语言 文章目录 &#x1f4af;前言&#x1f4af;题目描述&#x1f4af;方法一&#xff1a;逐字符移动法&#x1f4af;方法二&#xff1a;使用辅助空间法&#x1f4af;方法三&#xff1a;三次反转法&#x1f4af;方法对…

肿瘤微环境中单细胞的泛癌分类

scRNA-seq可以揭示肿瘤微环境 (TME) 内细胞异质性的宝贵见解&#xff0c;scATOMIC是一种用于恶性和非恶性细胞的注释工具。在 300,000 个癌症、免疫和基质细胞上训练了 scATOMIC&#xff0c;为 19 种常见癌症定义了一个泛癌症参考&#xff0c;scATOMIC优于当前的分类方法。在 2…

《算法导论》英文版前言To the teacher第3段研习录:题海战术有没有?

【英文版】 We have included 957 exercises and 158 problems. Each section ends with exercises, and each chapter ends with problems. The exercises are generally short questions that test basic mastery of the material. Some are simple self-check thought exer…

docker使用(镜像、容器)

docker基础使用 文章目录 前言1.镜像操作1.1命令介绍1.2.案例实操1.2.1查找镜像1.2.2下载镜像1.2.3查看当前镜像 2.容器操作2.1命令2.1.1容器创建与启动2.1.2. 容器查看2.1.3. 容器操作2.1.4. 容器删除2.1.5. 容器日志2.1.6. 容器内文件操作2.1.7. 容器内命令执行2.1.8. 其他常…

自编码器(二)

自编码器到底好在哪里&#xff1f;当我们把一个高维度的图片&#xff0c;变成一个低维度的向量的时候&#xff0c;到 底带来什么样的帮助呢&#xff1f;我们来设想一下&#xff0c;自编码器这件事情它要做的&#xff0c;是把一张图片压缩 又还原回来&#xff0c;但是还原这件事…

springboot旅游管理系统的设计与实现

springboot旅游管理系统的设计与实现 如需源码pc端&#x1f449;&#x1f449;&#x1f449;资源 手机端&#x1f449;&#x1f449;&#x1f449;资源 摘 要 信息化社会内需要与之针对性的信息获取途径&#xff0c;但是途径的扩展基本上为人们所努力的方向&#xff0c;由于…

SQL进阶——子查询与视图

在SQL中&#xff0c;子查询和视图是两种强大的技术&#xff0c;用于处理复杂的查询、提高代码的重用性以及优化查询性能。子查询允许开发者在查询中嵌套其他查询&#xff0c;而视图则是对复杂查询的封装&#xff0c;可以简化开发工作并提高代码的可维护性。 本章将深入探讨如何…

【组成原理】计算机硬件设计——ALU

2bit 复用器 A B C D 为该元件的4个输入口&#xff0c;假设 输入口都是 4位&#xff0c;故 数据输入范围 是 0~ 16. Sel是2位选择开关&#xff0c;可以标识 0&#xff0c;1&#xff0c;2&#xff0c;3&#xff0c;这样可以实现控制4个输入的选择。 元件外观&#xff1a; 二、…

基于MFC实现的银行模拟系统

基于MFC实现的银行模拟系统 1.软硬件运行环境 1.1 项目研究背景与意义 为了能给学生熟悉银行业务系统提供真实的操作环境, 使学生在掌握理论知识的同时熟悉银行业务的实际操作过程&#xff0c;改变其知识结构&#xff0c;培养商业银行真正需要的实用人才&#xff0c;增强学生…

【LeetCode每日一题】——189.轮转数组

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【题目进阶】八【解题思路】九【时空频度】十【代码实现】十一【提交结果】 一【题目类别】 数组 二【题目难度】 中等 三【题目编号】 189.轮转数组 四【题目描述】 …

滑动窗口篇——如行云流水般的高效解法与智能之道(3)

前言&#xff1a; 上篇我们介绍了滑动窗口的进阶练习&#xff0c;本篇难度继续升级&#xff0c;同样结合具体题目&#xff0c;帮助大家进一步掌握和运用滑动窗口。 一. 找到字符串中所有字母异位词 题目链接&#xff1a;438. 找到字符串中所有字母异位词 - 力扣&#xff08;L…

uniapp首页样式,实现菜单导航结构

实现菜单导航结构 1.导入字体图标库需要的文件 2.修改引用路径iconfont.css 3.导入到App.vue中 <style>import url(./static/font/iconfont.css); </style>导航区域代码 VUE代码 <template><view class"home"><!-- 导航区域 --><…

Rust SQLx CLI 同步迁移数据库

上文我们介绍了SQLx及SQLite&#xff0c;并介绍了如何使用代码同步迁移数据库。本文介绍Sqlx cli 命令行工具&#xff0c;介绍如何安装、使用&#xff0c;利用其提供的命令实现数据表同步迁移。Java生态中有flyway, sqlx cli 功能类似&#xff0c;利用命令行工具可以和其他语言…

【天地图】HTML页面实现车辆轨迹、起始点标记和轨迹打点的完整功能

目录 一、功能演示 二、完整代码 三、参考文档 一、功能演示 运行以后完整的效果如下&#xff1a; 点击开始&#xff0c;小车会沿着轨迹进行移动&#xff0c;点击轨迹点会显示经纬度和时间&#xff1a; 二、完整代码 废话不多说&#xff0c;直接给完整代码&#xff0c;替换…

鸿蒙学习自由流转与分布式运行环境-价值与架构定义(1)

文章目录 价值与架构定义1、价值2、架构定义 随着个人设备数量越来越多&#xff0c;跨多个设备间的交互将成为常态。基于传统 OS 开发跨设备交互的应用程序时&#xff0c;需要解决设备发现、设备认证、设备连接、数据同步等技术难题&#xff0c;不但开发成本高&#xff0c;还存…

如何启动 Docker 服务:全面指南

如何启动 Docker 服务:全面指南 一、Linux 系统(以 Ubuntu 为例)二、Windows 系统(以 Docker Desktop 为例)三、macOS 系统(以 Docker Desktop for Mac 为例)四、故障排查五、总结Docker,作为一种轻量级的虚拟化技术,已经成为开发者和运维人员不可或缺的工具。它允许用…

Mac启动服务慢问题解决,InetAddress.getLocalHost().getHostAddress()慢问题。

项目启动5分钟&#xff0c;很明显有问题。像网上其他的提高jvm参数就不说了&#xff0c;应该不是这个问题&#xff0c;也就快一点。 首先找到自己的电脑名称&#xff08;用命令行也行&#xff0c;只要能找到自己电脑名称就行&#xff0c;这里直接在共享里看&#xff09;。 复制…

实时美颜直播APP开发指南:美颜sdk与美颜api的应用实践

本篇文章&#xff0c;小编将探讨如何在直播APP中实现实时美颜功能&#xff0c;重点介绍美颜sdk与api的应用实践。 一、什么是实时美颜技术&#xff1f; 实时美颜技术&#xff0c;通常通过图像处理算法&#xff0c;基于主播或用户的实时视频流&#xff0c;进行面部特征的优化。…

【纯原生js】原生实现h5落地页面中的单选组件按钮及功能

h5端的按钮系统自带的一般都很丑&#xff0c;需要我们进行二次美化&#xff0c;比如单选按钮复选框之类的&#xff0c;那怎么对其进行html和css的改造&#xff1f; 实现效果 实现代码 <section id"tags"><h2>给景区添加标题</h2><label><…

win10系统安装docker-desktop

1、开启Hyper-v ———————————————— Hyper-V 是微软提供的一种虚拟化技术&#xff0c;它允许你在同一台物理计算机上运行多个独立的操作系统实例。这种技术主要用于开发、测试、以及服务器虚拟化等领域。 —————————————————————— &#…