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

【435. 无重叠区间 中等】

题目:

给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。

注意 只在一点上接触的区间是 不重叠的。例如 [1, 2] 和 [2, 3] 是不重叠的。

示例 1:
输入: intervals = [[1,2],[2,3],[3,4],[1,3]]
输出: 1
解释: 移除 [1,3] 后,剩下的区间没有重叠。

示例 2:
输入: intervals = [ [1,2], [1,2], [1,2] ]
输出: 2
解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。

示例 3:
输入: intervals = [ [1,2], [2,3] ]
输出: 0
解释: 你不需要移除任何区间,因为它们已经是无重叠的了。

提示:

  • 1 <= intervals.length <= 105
  • intervals[i].length == 2
  • -5 * 104 <= starti < endi <= 5 * 104

思路:

这道题有两个思路:

  1. 记录重叠区间个数,重叠区间个数就是最小移除次数
  2. 记录非交叉区间个数,最小移除次数 = 区间总数 - 非交叉区间个数

看到这道题目都冥冥之中感觉要排序,但是究竟是按照右边界排序,还是按照左边界排序呢?

其实都可以。主要就是为了让区间尽可能的重叠。

这里按照右边界排序。

针对思路2,记录非交叉区间的个数还是有技巧的,如图:
在这里插入图片描述
区间,1,2,3,4,5,6都按照右边界排好序。

当确定区间 1 和 区间2 重叠后,如何确定是否与 区间3 也重贴呢?

就是取 区间1 和 区间2 右边界的最小值,因为这个最小值之前的部分一定是 区间1 和区间2 的重合部分,如果这个最小值也触达到区间3,那么说明 区间 1,2,3都是重合的。

接下来就是找大于区间1结束位置的区间,是从区间4开始。那有同学问了为什么不从区间5开始?别忘了已经是按照右边界排序的了。

区间4结束之后,再找到区间6,所以一共记录非交叉区间的个数是三个。

总共区间个数为6,减去非交叉区间的个数3。移除区间的最小数量就是3。


代码:

  1. 思路一
class Solution {
public://  按照右边界排序static bool cmp(vector<int>& a, vector<int>& b){return a[1] < b[1];}int eraseOverlapIntervals(vector<vector<int>>& intervals) {if(intervals.size() == 0) return 0;sort(intervals.begin(), intervals.end(), cmp);int result = 0;  //  记录重叠区间的个数for(int i = 1; i < intervals.size(); i++){if(intervals[i][0] < intervals[i - 1][1]){ //  如果重叠intervals[i][1] = min(intervals[i - 1][1], intervals[i][1]);    //  更新区间分割点result++;    //  重叠区间个数加一}}return result;    //  重叠区间个数就是最小移除次数}
}; 
  1. 思路二
class Solution {
public://  按照右边界排序static bool cmp(vector<int>& a, vector<int>& b){return a[1] < b[1];}int eraseOverlapIntervals(vector<vector<int>>& intervals) {if(intervals.size() == 0) return 0;sort(intervals.begin(), intervals.end(), cmp);int count = 1;  //  记录非交叉区间的个数int end = intervals[0][1];  //  记录区间分割点for(int i = 1; i < intervals.size(); i++){if(end <= intervals[i][0]){ //  如果不交叉end = intervals[i][1];  //  更新区间分割点count++;    //  非交叉区间个数加一}}return intervals.size() - count;    //  最小移除次数 = 区间个数 - 非交叉区间的个数}
}; 

总结:

时间复杂度:O(nlog n) ,有一个快排
空间复杂度:O(n),有一个快排,最差情况(倒序)时,需要n次递归调用。因此确实需要O(n)的栈空间


参考:

代码随想录

相关文章:

【435. 无重叠区间 中等】

题目&#xff1a; 给定一个区间的集合 intervals &#xff0c;其中 intervals[i] [starti, endi] 。返回 需要移除区间的最小数量&#xff0c;使剩余区间互不重叠 。 注意 只在一点上接触的区间是 不重叠的。例如 [1, 2] 和 [2, 3] 是不重叠的。 示例 1: 输入: intervals …...

文献学习笔记:中风醒脑液(FYTF-919)临床试验解读:有效还是无效?

【中风醒脑液&#xff08;FYTF-919&#xff09;临床试验解读&#xff1a;有效还是无效&#xff1f;】 在发表于 The Lancet &#xff08;2024 年 11 月 30 日&#xff0c;第 404 卷&#xff09;的临床研究《Traditional Chinese medicine FYTF-919 (Zhongfeng Xingnao oral pr…...

4 前端前置技术(中):node.js环境

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言 前言...

5.角色基础移动

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 角色的xyz轴与移动方向拌合输入轴值add movement inputget controller rotationget right vectorget forward vector 发现模型的旋转改变后&#xff0c;xyz轴也会改变&#xff0c;所以需要旋转值来计算xyz轴方向。 …...

vue2语法速通

首先&#xff0c;git clone下来的项目要npm install下载依赖&#xff0c;如果是vue项目&#xff0c;运行通常npm run serve或者npm run dev vue速通一下 使用vite创建项目&#xff08;较快&#xff09; npm create vite 配置文件 src/ ├── assets/ # 存放…...

doris:基于导入的批量删除

基于导入的批量删除​ 删除操作可以视为数据更新的一种特殊形式。在主键模型&#xff08;Unique Key&#xff09;表上&#xff0c;Doris 支持通过导入数据时添加删除标记来实现删除操作。 相比 DELETE 语句&#xff0c;使用删除标记在以下场景中具有更好的易用性和性能优势&a…...

【商品库存管理——差分、前缀和】

题目 代码 #include <bits/stdc.h> using namespace std; const int N 3e510; int l[N], r[N], b[N]; int s1[N], s0[N]; int main() {int n, m;cin >> n >> m;for(int i 1; i < m; i){cin >> l[i] >> r[i];b[l[i]], b[r[i]1]--;}int a 0…...

Linux基本指令2

07.man指令&#xff08;重要&#xff09;&#xff1a; Linux的命令有很多参数&#xff0c;我们不可能全记住&#xff0c;我们可以通过查看联机手册获取帮助。访问Linux手册页的命令是 man 语法: man [选项] 命令 man ls查看ls指令更多的说明。 man man&#xff1a; man指令就…...

运维监控平台 WGCLOUD

WGCLOUD v3.5.7 于 2025 年 2 月 3 日发布1。这是一款开源免费的分布式运维监控平台&#xff0c;server 端基于 springboot 开发&#xff0c;agent 端使用 go 编写1。以下是 v3.5.7 版本的更新内容1&#xff1a; 2. 自定义告警批量添加设置 3. 告警通知渠道设置 4. 告警规则设置…...

GDAL矢量数据集相关接口的资源控制问题

1. 引言 笔者在《使用GDAL读写矢量文件》这篇文章中总结了通过GDAL读写矢量的具体实现。不过这篇文章中并没有谈到涉及到矢量数据集相关接口的资源控制问题。具体来说&#xff0c;GDAL/OGR诞生的年代连C语言本身都不是很完善&#xff08;c11之前&#xff09;&#xff0c;因此提…...

Android学习19 -- 手搓App

1 前言 之前工作中&#xff0c;很多时候要搞一个简单的app去验证底层功能&#xff0c;Android studio又过于重型&#xff0c;之前用gradle&#xff0c;被版本匹配和下载外网包折腾的堪称噩梦。所以搞app都只有找应用的同事帮忙。一直想知道一些简单的app怎么能手搓一下&#x…...

人工智能导论-第3章-知识点与学习笔记

参考教材3.2节的内容&#xff0c;介绍什么是自然演绎推理&#xff1b;解释“肯定后件”与“否定前件”两类错误的演绎推理是什么意义&#xff0c;给出具体例子加以阐述。参考教材3.3节的内容&#xff0c;介绍什么是文字&#xff08;literal&#xff09;&#xff1b;介绍什么是子…...

wxWidgets中wxGrid表格使用示例,去掉竖向表头

这里设置表格各种属性如下: // 去掉竖向表头 grid->SetRowLabelSize(0); // 设置表格背景色为黑色 grid->SetDefaultCellBackgroundColour(*wxBLACK); // 设置单元格内容居中,字体为16号,白色 wxFont cellFont(16, wxFONTFAMILY_DEFAULT, wx…...

全面掌握市场信息:xtquant库在证券品种数据获取中的应用

全面掌握市场信息&#xff1a;xtquant库在证券品种数据获取中的应用 开篇点题&#xff1a;技术背景和应用场景 在量化交易领域&#xff0c;快速准确地获取市场基础信息是至关重要的。xtquant库提供了一种便捷的途径来获取各类证券品种的数据&#xff0c;包括股票、指数、基金等…...

DeepSeek 的含金量还在上升

大家好啊&#xff0c;我是董董灿。 最近 DeepSeek 越来越火了。 网上有很多针对 DeepSeek 的推理测评&#xff0c;除此之外&#xff0c;也有很多人从技术的角度来探讨 DeepSeek 带给行业的影响。 比如今天就看到了一篇文章&#xff0c;探讨 DeepSeek 在使用 GPU 进行模型训练…...

day38|leetcode 322零钱兑换,279.完全平方数,139.单词拆分

322. 零钱兑换 给你一个整数数组 coins &#xff0c;表示不同面额的硬币&#xff1b;以及一个整数 amount &#xff0c;表示总金额。 计算并返回可以凑成总金额所需的 最少的硬币个数 。如果没有任何一种硬币组合能组成总金额&#xff0c;返回 -1 。 你可以认为每种硬币的数量是…...

【Linux系统】信号:信号保存 / 信号处理、内核态 / 用户态、操作系统运行原理(中断)

理解Linux系统内进程信号的整个流程可分为&#xff1a; 信号产生 信号保存 信号处理 上篇文章重点讲解了 信号的产生&#xff0c;本文会讲解信号的保存和信号处理相关的概念和操作&#xff1a; 两种信号默认处理 1、信号处理之忽略 ::signal(2, SIG_IGN); // ignore: 忽略#…...

Go语言指针的解引用和间接引用

在 Go 语言中&#xff0c;"解引用"和"间接引用"是与指针相关的概念。 解引用 (Dereferencing)&#xff1a; 解引用是指通过指针访问它所指向的变量的值。在 Go 中&#xff0c;使用星号&#xff08;*&#xff09;来解引用一个指针。 例如&#xff1a; v…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.6 广播机制核心算法:维度扩展的数学建模

2.6 广播机制核心算法&#xff1a;维度扩展的数学建模 目录/提纲 #mermaid-svg-IfELXmhcsdH1tW69 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-IfELXmhcsdH1tW69 .error-icon{fill:#552222;}#mermaid-svg-IfELXm…...

硬件产品经理:需求引力模型(DGM)

目录 1、DGM 模型简介 2、理论核心&#xff1a;打破传统线性逻辑 3、三大定律 第一定律&#xff1a;暗物质需求法则 第二定律&#xff1a;引力井效应 第三定律&#xff1a;熵减增长律 4、落地工具包 工具1&#xff1a;需求密度热力图 工具3&#xff1a;摩擦力歼灭清单…...

基于“蘑菇书”的强化学习知识点(四):贝尔曼方程

贝尔曼方程 摘要贝尔曼方程&#xff08;Bellman Equation&#xff09;详解1. 核心思想2. 基本概念3. 贝尔曼方程的两种形式(1) 状态值函数的贝尔曼方程(2) 动作值函数的贝尔曼方程 4. 贝尔曼最优方程&#xff08;Bellman Optimality Equation&#xff09;5. 示例&#xff1a;网…...

Guided Decoding (借助FSM,有限状态自动机)

VLLM对结构化输出的支持&#xff1a; vllm/docs/source/features/structured_outputs.md at main vllm-project/vllm GitHub VLLM对tool call的支持&#xff1a; vllm/docs/source/features/tool_calling.md at main vllm-project/vllm GitHub 以上指定输出格式&#xf…...

ComfyUI工作流 图像反推生成人像手办人像参考(SDXL版)

文章目录 图像反推生成人像手办人像参考SD模型Node节点工作流程效果展示开发与应用图像反推生成人像手办人像参考 本工作流旨在通过利用 Stable Diffusion XL(SDXL)模型和相关辅助节点,实现高效的人像参考生成和手办设计。用户可通过加载定制的模型、LORA 调整和控制节点对…...

C++11新特性之long long超长整形

1.介绍 long long 超长整形是C11标准新添加的&#xff0c;用于表示更大范围整数的类型。 2.用法 占用空间&#xff1a;至少64位&#xff08;8个字节&#xff09;。 对于有符号long long 整形&#xff0c;后缀用“LL”或“II”标识。例如&#xff0c;“10LL”就表示有符号超长整…...

【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】2.5 高级索引应用:图像处理中的区域提取

2.5 高级索引应用&#xff1a;图像处理中的区域提取 目录/提纲 #mermaid-svg-BI09xc20YqcpUam7 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-BI09xc20YqcpUam7 .error-icon{fill:#552222;}#mermaid-svg-BI09xc20…...

响应式编程_01基本概念:前世今生

文章目录 引言响应式编程的技术优势全栈式响应式编程从传统开发模式到异步执行技术Web 请求与 I/O 模型异步调用的实现技术回调Future机制 响应式编程实现方法观察者模式发布-订阅模式数据流与响应式 响应式宣言和响应式系统 引言 大流量、高并发的访问请求的项目&#xff0c;…...

系统URL整合系列视频一(需求方案)

视频 系统URL整合系列视频一&#xff08;需求方案&#xff09; 视频介绍 &#xff08;全国&#xff09;某大型分布式系统Web资源URL整合需求实现方案讲解。当今社会各行各业对软件系统的web资源访问权限控制越来越严格&#xff0c;控制粒度也越来越细。安全级别提高的同时也增…...

C#中的委托(Delegate)

什么是委托? 首先,我们要知道C#是一种强类型的编程语言,强类型的编程语言的特性,是所有的东西都是特定的类型 委托是一种存储函数的引用类型,就像我们定义的一个 string str 一样,这个 str 变量就是 string 类型. 因为C#中没有函数类型,但是可以定义一个委托类型,把这个函数…...

Ubuntu 24.04 安装 Poetry:Python 依赖管理的终极指南

Ubuntu 24.04 安装 Poetry&#xff1a;Python 依赖管理的终极指南 1. 更新系统包列表2. 安装 Poetry方法 1&#xff1a;使用官方安装脚本方法 2&#xff1a;使用 Pipx 安装 3. 配置环境变量4. 验证安装5. 配置 Poetry&#xff08;可选&#xff09;设置虚拟环境位置配置镜像源 6…...

爱普生L3153打印机无线连接配置流程

家里使用的是移动宽带中兴路由器&#xff0c;有WPS功能&#xff0c;进入192.168.1.1管理员页面&#xff0c;用户名user&#xff0c;密码在路由器背面&#xff08;可以登录后修改密码&#xff09;。在网络-WLAN网络配置-WPS中&#xff0c;点击push button&#xff0c;激活路由器…...