435. 无重叠区间 - 力扣(LeetCode)

题目描述

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

题目示例

输入: intervals = \[1,2,2,3,3,4,1,3]

输出: 1

解释: 移除 1,3 后,剩下的区间没有重叠。

解题思路

将数组按照左边界或者右边界从小到大排序,目的是为了将容易重叠的区间放在一块,本题解采用左边界排序。采取以下贪心策略:

  • 如果当前左边界大于等于上个右边界,表示两个区间无重叠,此时不需要做任何操作,因为我们是要去除重叠部分。
  • 否则,表示两个区间有重叠,此时 result++,因为至少需要移除一个才可以保证无重叠。然后需要将当前右边界修改成与上个右边界的最小值,目的是为了下次判断有无重叠。如果下次判断无重叠的话,就执行上个逻辑不需要任何操作,只需要去除一个重叠部分就可以了;如果下次有重叠执行这个逻辑,则需要去除两个重叠部分,然后再更新最小右边界,继续判断重叠部分。

参考代码

java 复制代码
class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        
        Arrays.sort(intervals, (a, b) -> {
            return Integer.compare(a[0], b[0]);
        });

        int ans = 0;
        for(int i = 1; i < intervals.length; i++) {
            // 当前左边界大于等于上个右边界,表示两个区间不重叠
            if(intervals[i][0] >= intervals[i-1][1]) {
            } else {
                // 两个区间重叠
                ans++;
                // 更新右边界最小值
                intervals[i][1] = Math.min(intervals[i][1], intervals[i-1][1]);
            }
        }

        return ans;
    }
}
相关推荐
froyoisle6 小时前
CSP 真题解析:[CSP-J 2019-T4] 加工零件
c++·算法·bfs·csp-j·算法竞赛·信息学·信奥赛
LuminousCPP6 小时前
C 语言集中实践全记录:顺序表 + 单链表原理实现与通讯录项目实战【附可运行源码】
c语言·开发语言·数据结构·经验分享·笔记
兰令水6 小时前
hot100【acm版】【2026.7.13打卡-java版本】
java·开发语言·数据结构·算法·leetcode·面试
Tisfy6 小时前
LeetCode 1291.顺次数:打表/枚举
算法·leetcode·题解·枚举·遍历
ysa0510307 小时前
【板子】拓扑排序
c++·算法·图论·板子
算法备案代理8 小时前
宽带自动连接保姆级教程
算法
罗超驿8 小时前
双指针算法详解:从入门到精通(Java版)
算法·leetcode·职场和发展
m0_377062928 小时前
电池电量计库伦算法计算公式
算法
patrickpdx8 小时前
高联预赛中的高斯函数问题
算法
tkevinjd8 小时前
力扣300-最长递增子序列
算法·leetcode·职场和发展·动态规划·贪心