[路飞]_leetcode-1288-删除被覆盖区间

简介: leetcode-1288-删除被覆盖区间

网络异常,图片无法展示
|


「这是我参与2022首次更文挑战的第4天,活动详情查看:2022首次更文挑战


[题目地址][B站地址]


给你一个区间列表,请你删除列表中被其他区间所覆盖的区间。


只有当 c <= ab <= 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 != jintervals[i] != intervals[j]


解题思路


本题要求我们将被覆盖的区间删除,这里我们可以首先对输入数组排序,排序的规则是按照区间的开始值进行升序排序,如果区间开始值相同,则让区间结束值大的在前面。


这样排序后的数组,就保证了,前面区间的开始值都必然小于等于后面区间的开始值,而区间开始值相同的区间,区间结束值大的必然在前面。


接下来我们从前向后扫描排序后的数组,如果当前区间的结束值小于等于前面区间的结束值,则该区间一定被前面的区间覆盖。


又因为本题只需要返回剩余区间的数目,所以我们不需要进行实际的区间删除,只需要初始化结果值为输入数组的长度,当找到一个被覆盖区间后,将结果值 -1,这样遍历完排序后的数组,就得到了剩余的区间数目。


动画演示


网络异常,图片无法展示
|


代码实现


var removeCoveredIntervals = function(intervals) {
  // 首先对输入数组子数组按区间开始值进行升序排序
  // 如果区间开始值相同,则结束值大的在前
  intervals.sort((a,b) => {
    if(a[0] === b[0]) return b[1]-a[1]
    return a[0]-b[0]
  })
  // 获取输入数组长度
  const len = intervals.length;
  // 初始化已处理区间结束值的最大值
  let max = intervals[0][1],
  // 初始化结果值为输入数组的长度
  res = len;
  // 遍历排序后的输入数组
  for(let i = 1;i<len;i++){
    // 获取当前区间的结束值
    const r = intervals[i][1]
    // 如果当前区间的结束值小于等于 max
    // 则当前区间被覆盖,res--
    if(max>=r) res--
    // 否则当前区间的结束值大于 max,更新 max
    else max = r
  }
  // 返回结果值
  return res;
};
复制代码


至此我们就完成了 leetcode-1288-删除被覆盖区间


如有任何问题或建议,欢迎留言讨论!👏🏻👏🏻👏🏻

相关文章
|
2月前
|
算法
Leetcode第57题(插入区间)
LeetCode第57题“插入区间”的解题方法,包括题目描述、示例、算法思路和代码实现,旨在解决将新区间插入有序且不重叠的区间列表中,并合并重叠区间的问题。
24 0
Leetcode第57题(插入区间)
|
4月前
|
算法
LeetCode第57题插入区间
LeetCode第57题"插入区间"的解题方法,利用原区间集有序的特性,通过三步插入操作,有效实现了新区间的插入和重叠区间的合并。
LeetCode第57题插入区间
|
6月前
|
存储 算法 测试技术
力扣经典150题第四十七题:汇总区间
力扣经典150题第四十七题:汇总区间
49 1
|
6月前
|
存储 SQL 算法
高效日程管理:利用区间合并算法优化活动安排【python LeetCode57】
高效日程管理:利用区间合并算法优化活动安排【python LeetCode57】
|
6月前
|
存储 算法 搜索推荐
掌握区间合并:解决实际问题的算法策略和应用案例【python LeetCode题目56】
掌握区间合并:解决实际问题的算法策略和应用案例【python LeetCode题目56】
|
6月前
|
存储 算法 数据可视化
【模拟面试问答】深入解析力扣163题:缺失的区间(线性扫描与双指针法详解)
【模拟面试问答】深入解析力扣163题:缺失的区间(线性扫描与双指针法详解)
|
6月前
|
存储 算法 测试技术
力扣经典150题第四十九题:插入区间
力扣经典150题第四十九题:插入区间
28 0
|
6月前
|
存储 算法 测试技术
力扣经典150题第四十八题:合并区间
力扣经典150题第四十八题:合并区间
81 0
|
7月前
DAY-4 | 力扣 - 求自身以外数组的乘积:区间划分,左右累乘,巧求乘积
该文档是关于LeetCode上的一道题目“Product of Array Except Self”的题解。提供了两种解题方法,一是暴力破解,即计算所有数的乘积后再逐个除以当前元素;二是左右累乘法,通过两次遍历数组分别计算左侧和右侧元素的乘积,避免了除法操作。其中,左右累乘法更优,代码实现中展示了这种方法。
48 1
|
7月前
力扣56.合并区间
力扣56.合并区间