删除被覆盖区间

简介: 🎈今天给大家带来的是算法练习,题目为"删除被覆盖区间"。

说在前面

🎈今天给大家带来的是算法练习,题目为"删除被覆盖区间"。

题目描述

给你一个区间列表,请你删除列表中被其他区间所覆盖的区间。\
只有当 c <= a 且 b <= d 时,我们才认为区间 [a,b) 被区间 [c,d) 覆盖。\
在完成所有删除操作后,请你返回列表中剩余区间的数目。\
示例:

输入:intervals = [[1,4],[3,6],[2,8]]
输出:2
解释:区间 [3,6] 被区间 [2,8] 覆盖,所以它被删除了。

提示:

1 <= intervals.length <= 1000
0 <= intervals[i][0] < intervals[i][1] <= 10^5
对于所有的 i != j:intervals[i] != intervals[j]

思路分析

题目描述很清晰,就是要我们把给出列表中的小区间删除,最后返回剩余元素的个数。这里的小区间是指列表中有包含该区间的大区间时,该区间即为小区间,即题目所说的只有当 c <= a 且 b <= d 时,我们才认为区间 [a,b) 被区间 [c,d) 覆盖,如图:
1649867590(1).png
相对于区间[1,4]来说,[2,4]是小区间,但相对于[1,5]来说,[1,4]又是小区间,所以[[1,4],[2,4],[1,5]]删除掉小区间后应该只剩下[[1,5]],具体解题思路如下:

  • 列表排序

我们要让做端点小的排在前面,如果左端点相等则让右端点大的排在前面,只要我们只需要一次遍历比较右端点即可得到答案。

intervals = intervals.sort((a,b)=>{
    if(a[0] == b[0]) return b[1] - a[1];
    return a[0] - b[0];
})
  • 遍历列表比较右端点
let r = intervals[0][1];
for(let i = 1; i < intervals.length; i++){
    if(r >= intervals[i][1]) res--;
    else r = intervals[i][1];
}

AC代码

/**
 * @param {number[][]} intervals
 * @return {number}
 */
var removeCoveredIntervals = function(intervals) {
    let res = intervals.length;
    intervals = intervals.sort((a,b)=>{
        if(a[0] == b[0]) return b[1] - a[1];
        return a[0] - b[0];
    })
    let r = intervals[0][1];
    for(let i = 1; i < intervals.length; i++){
        if(r >= intervals[i][1]) res--;
        else r = intervals[i][1];
    }
    return res;
};

说在后面

🎉这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打打羽毛球🏸 ,平时也喜欢写些东西,既为自己记录📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解🙇,写错的地方望指出,定会认真改进😊,在此谢谢大家的支持,我们下文再见🙌。
目录
相关文章
|
机器学习/深度学习
【机器学习】误差分析
【1月更文挑战第23天】【机器学习】误差分析
|
设计模式 编解码 C++
【ffmpeg 视频播放】深入探索:ffmpeg视频播放优化策略与设计模式的实践应用(一)
【ffmpeg 视频播放】深入探索:ffmpeg视频播放优化策略与设计模式的实践应用
445 0
|
存储 SQL 算法
Mysql进阶索引篇02——InnoDB存储引擎的数据存储结构(一)
前面我们已经剖析了mysql中InnoDB与MyISAM索引的数据结构,了解了B+树的设计思想、原理,并且介绍了B+树与Hash结构、平衡二叉树、AVL树、B树等的区别和实际应用场景。 页和页之间并不一定在物理上相连,只是在逻辑上使用双向链表关联。指针、记录究竟是如何存储的呢?其实这就需要联系我们之前提到的行格式了。数据查找在页目录中二分法快速定位到槽,上面的过程都与页的内部结构相关,本文将详细的阐述。
Mysql进阶索引篇02——InnoDB存储引擎的数据存储结构(一)
|
10月前
|
安全 Unix 虚拟化
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 2 月更新)
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 2 月更新)
366 11
Windows 7 & Windows Server 2008 R2 简体中文版下载 (2025 年 2 月更新)
|
11月前
|
机器学习/深度学习 人工智能 算法
人工智能的三大主义--——行为主义(actionism),连接主义 (connectionism)
这段内容涵盖了人工智能领域的重要概念和历史节点。首先介绍了布鲁克斯的六足行走机器人及Spot机器狗,被视为新一代“控制论动物”。接着解释了感知机作为最简单的人工神经网络,通过特征向量进行二分类。1974年,沃伯斯提出误差反向传播(BP)算法,利用梯度调整权重以优化模型。最后,阐述了符号主义、连接主义和行为主义三大学派的发展与融合,强调它们在持续学习中共同推动人工智能的进步。
人工智能的三大主义--——行为主义(actionism),连接主义 (connectionism)
|
运维 监控 NoSQL
Redis Sentinel哨兵模式部署
Redis Sentinel哨兵模式部署
402 2
|
存储 监控 API
史上最全最完整,最详细,软件保护技术-程序脱壳篇-逆向工程学习记录(二)
本文详细介绍了软件保护技术中的程序脱壳过程,包括IAT(导入地址表)的重建、OD(OllyDbg)跟踪输入表、HOOK-API技术以及FSG、UPX和WinUpacx等常见压缩壳的加脱壳方法。文章通过具体实例和详细步骤,帮助读者理解并掌握逆向工程的基本技巧。[原文链接](https://developer.aliyun.com/article/1618653)
417 0
|
Web App开发 JavaScript 前端开发
JavaScript——定时器为什么是不精确的
JavaScript——定时器为什么是不精确的
207 0
|
机器学习/深度学习 人工智能 自然语言处理
人工智能浪潮下的自然语言处理技术演进
本文从自然语言处理(NLP)技术的历史发展出发,深入剖析了在人工智能(AI)大潮中该领域的创新突破。我们将探讨深度学习如何推动语言模型的革新、多语言处理技术的发展,以及机器翻译和语音识别的最新进展。文章还将讨论这些技术进步如何影响社会,并展望未来NLP技术的潜力与挑战。
460 0
|
网络安全 开发工具 git