【贪心】【数据结构-小根堆,差分】力扣2406. 将区间分为最少组数

给你一个二维整数数组 intervals ,其中 intervals[i] = [lefti, righti] 表示 闭 区间 [lefti, righti] 。

你需要将 intervals 划分为一个或者多个区间 组 ,每个区间 只 属于一个组,且同一个组中任意两个区间 不相交 。

请你返回 最少 需要划分成多少个组。

如果两个区间覆盖的范围有重叠(即至少有一个公共数字),那么我们称这两个区间是 相交 的。比方说区间 [1, 5] 和 [5, 8] 相交。

示例 1:
输入:intervals = [[5,10],[6,8],[1,5],[2,3],[1,10]]
输出:3
解释:我们可以将区间划分为如下的区间组:

  • 第 1 组:[1, 5] ,[6, 8] 。
  • 第 2 组:[2, 3] ,[5, 10] 。
  • 第 3 组:[1, 10] 。
    可以证明无法将区间划分为少于 3 个组。

示例 2:
输入:intervals = [[1,3],[5,6],[8,10],[11,13]]
输出:1
解释:所有区间互不相交,所以我们可以把它们全部放在一个组内。

在这里插入图片描述

法1: 贪心:优先队列(小根堆)

class Solution {
public:int minGroups(vector<vector<int>> &intervals) {sort(intervals.begin(), intervals.end(), [](auto &a, auto &b) { return a[0] < b[0]; });priority_queue<int, vector<int>, greater<>> pq;for (auto &p : intervals) {if (!pq.empty() && pq.top() < p[0]) pq.pop();pq.push(p[1]);}return pq.size();}
};

这种算法由于运用了堆的数据结构,比下面的差分算法要高效。

首先需要先对intervals的每个区间的左端点进行排序。
我们首先要找到局部最优解,也就是判断一个新的区间要分到哪一组,我们选择已有组的最小右端点。由于左端点已经排序过,所以我们只需要记录每一组的最大右端点,然后对其进行排序,堆顶的就是所有组中的最小右端点。

当新区间的左端点要比堆顶元素(最小右端点)大的时候,那么就将这个区间分到堆顶元素所在的组中,由于我们只需要记录每个组的最大右端点,那么就将堆顶元素替换成新区间的右端点,然后priority_queue将会保证堆顶元素是最小的(所有组的最大右端点比较后的最小的最大右端点)。如果新区间左端点没有比堆顶元素大,那么就说明他和每个组都会重叠,这时候他就是新的一组。

最后返回堆的大小,也就是组的数量。

方法二:差分

class Solution {
public:int minGroups(vector<vector<int>>& intervals) {map<int, int> diff;for(auto interval : intervals){diff[interval[0]]++;diff[interval[1]+1]--;}int s = 0, ans = 0;for(auto &[_, d] : diff){s += d;ans = max(ans, s);}return ans;}
};

这道题的本质就是找到某个区间重叠的部分的最大重叠数,因为当区间同时重叠的时候,这时候所涉及到的区间必须分在不同组,所以可以转换为上下车模型,即同一时刻在车上的最大人数。

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

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

相关文章

变压器数据集,电气设备红外热图像数据集,部分带温度显示。变压器红外数据集,温度显示5000多张

项目背景&#xff1a; 变压器作为电力系统的关键设备之一&#xff0c;其运行状态直接影响到电网的安全稳定。红外热成像技术因其非接触、快速、直观的特点&#xff0c;在电力设备的故障诊断和状态监测中得到了广泛应用。本数据集旨在为基于红外热图像的变压器状态监测提供高质量…

小程序开发设计-第一个小程序:创建小程序项目④

上一篇文章导航&#xff1a; 小程序开发设计-第一个小程序&#xff1a;安装开发者工具③-CSDN博客https://blog.csdn.net/qq_60872637/article/details/142219152?spm1001.2014.3001.5501 须知&#xff1a;注&#xff1a;不同版本选项有所不同&#xff0c;并无大碍。 一、创…

uniapp自定义导航栏以及页面加背景

如果想给uniapp的页面加背景图片的话&#xff0c;疯狂度了之后会发现uniapp中背景图片用本地图片不起效果&#xff0c;所以一般用网络路径&#xff0c;之后又会发现&#xff0c;页面如果直接加背景的话有可能会遇到页面内容不够&#xff0c;背景撑不满整个页面&#xff0c;如果…

如何编写智能合约——基于长安链的Go语言的合约开发

场景设计&#xff1a;文件存证系统 在数字化时代&#xff0c;文件存证和版本追踪变得越来越重要。设想一个场景&#xff1a;在一个法律事务管理系统中&#xff0c;用户需要提交和管理各种文件的版本记录&#xff0c;以确保每个文件在不同时间点的状态可以被准确追踪。文件可能经…

mac新手入门(快捷键)

系统常用快捷键 基本操作 Command-Z 撤销Command-X 剪切  Command-C 拷贝&#xff08;Copy&#xff09; Option Shift Command V 纯文本拷贝 Command-V 粘贴  Command-A 全选&#xff08;All&#xff09;Command-S 保存&#xff08;Save) Command-F 查找&#xff0…

实现实时Web应用,使用AJAX轮询、WebSocket、还是SSE呢??

文章目录 短轮询&#xff08;Short Polling&#xff09;长轮询&#xff08;Long Polling&#xff09;Comet “服务器推” &#xff08;这玩意现在用的很少了&#xff0c;了解一下即可&#xff09;WebSocket原理&#xff1a;方法&#xff1a;事件&#xff1a; SSE原理事件 总结 …

MyBatisPlus 使用 IPage 分页

3.4.0之前版本 Beanpublic PaginationInterceptor paginationInterceptor() {PaginationInterceptor paginationInterceptor new PaginationInterceptor();paginationInterceptor.setLimit(-1);paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));r…

安全建设当中的冷门知识

今天说点有趣的话题&#xff0c;也是因为在安全建设过程中&#xff0c;安全员也不太可能都按照最理想的状态去工作&#xff0c;有资源的问题&#xff0c;有管理惰性问题&#xff0c;当然也有管理者本身决策的问题。 安全行业起步较晚&#xff0c;16年才施行网络安全法&#xff…

【JAVA】数据脱敏技术(对称加密算法、非对称加密算法、哈希算法、消息认证码(MAC)算法、密钥交换算法)使用方法

文章目录 数据脱敏的定义和目的数据脱敏的技术分类对称加密算法非对称加密算法哈希算法消息认证码&#xff08;MAC&#xff09;算法密钥交换算法 数据脱敏的技术方案实现字符替换哈希算法&#xff08;例如:SHA-3 算法&#xff09;消息认证码&#xff08;MAC&#xff09;算法(CM…

代理导致的git错误

问题&#xff1a; 今天在clone时出现如下错误&#xff1a; fatal: unable to access https://github.com/NirDiamant/RAG_Techniques.git/: Failed to connect to 127.0.0.1 port 10089 after 2065 ms: Couldnt connect to server真是让人感到奇怪&#xff01;就在前天&#…

影刀RPE学习——自动化

下载网址&#xff1a;影刀RPA - 影刀官网 (yingdao.com) 傻瓜式安装进入界面&#xff1a; 官方教程&#xff1a;影刀RPA零基础入门教程&#xff08;2024最新版&#xff09;&#xff1a;01 引入课-影刀初相识_哔哩哔哩_bilibili

Unity Hub自动安装指定版本Unity的Android开发环境

Unity开发Android环境要求SDK、DNK、JDK、Gradle版本都要对才能发布APK&#xff0c;自己去配置很容易出错。Unity Hub可以自动安装指定版本Unity的Android开发环境。 1.安装国内用的UnityHub&#xff08;我这里用的3.3.2-c6&#xff09; 2.找到对应的Unity版本 3.点击【从Unit…

职场 Death Note

场景一 测试&#xff1a;哎&#xff0c;怎么会这样呢&#xff1f;时间没到&#xff0c;他怎么就变成这个样子了呢&#xff1f;一副大惊小怪&#xff0c;整个办公室都是他的声音 开发&#xff1a;对对对&#xff0c;我代码问题&#xff0c;别BB了。 你直接说这个地方不对&#…

【Kubernetes】常见面试题汇总(十九)

目录 59.简述 Kubernetes 所支持的存储供应模式&#xff1f; 60.简述 Kubernetes CSl 模型&#xff1f; 61.简述 Kubernetes Worker节点加入集群的过程&#xff1f; 59.简述 Kubernetes 所支持的存储供应模式&#xff1f; Kubernetes 支持两种资源的存储供应模式&#xff1a…

sqlgun靶场训练

1.看到php&#xff1f;id &#xff0c;然后刚好有个框&#xff0c;直接测试sql注入 2.发现输入1 union select 1,2,3#的时候在2处有回显 3.查看表名 -1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schemadatabase()# 4.查看列名…

【自动驾驶】决策规划算法 | 数学基础(三)直角坐标与自然坐标转换Ⅱ

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

Karpathy认为“LLM”这个名字不准确 马斯克非常赞同

LLM 应该改名吗&#xff1f;你怎么看。在 AI 领域&#xff0c;几乎每个人都在谈论大型语言模型&#xff0c;其英文全称为 Large Language Models&#xff0c;简写为 LLM。因为 LLM 中有“Language”一词&#xff0c;因此&#xff0c;大家默认这种技术和语言密切相关。然而&…

Rust:深入浅出说一说 Error 类型

1. Rust 的错误返回机制 Rust 函数计算过程如果发生错误怎么办&#xff1f;Rust没有采取 C 的异常机制&#xff0c;而是允许直接返回错误信息。 这意味着&#xff0c;Rust 提供了错误返回机制&#xff0c;允许函数正常结束时返回计算结果&#xff0c;同时&#xff0c;如果计算…

纯小白安装pytorch(快速上手)

1.首先进入你的虚拟环境(不进入也没关系) 在anaconda prompt中打开&#xff0c;输入activate 虚拟环境2.查看自己的conda源 conda config --show channels3.清空自己的conda源 conda config --remove-key channels4.添加源 conda config --add channels https://mirrors.tu…

蓝桥杯-STM32G431RBT6(解决LCD与LED引脚冲突的问题)

一、LCD与LED为什么会引脚冲突 LCD与LED引脚共用。 网上文章是在LCD_WriteRAM、LCD_WriteRAM_Prepare、LCD_WriteReg中添加&#xff0c;但问题并没有解决。 二、使用步骤 在如下函数中加入uint16_t tempGPIOC->ODR; GPIOC->ODRtemp; LCD_Init(); void LCD_C…