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

题目描述

给定一个区间的集合 intervals ,其中 intervals[i] = [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;
    }
}
相关推荐
仙俊红25 分钟前
LeetCode322零钱兑换
算法
颖风船28 分钟前
锂电池SOC估计的一种算法(改进无迹卡尔曼滤波)
python·算法·信号处理
551只玄猫42 分钟前
KNN算法基础 机器学习基础1 python人工智能
人工智能·python·算法·机器学习·机器学习算法·knn·knn算法
charliejohn42 分钟前
计算机考研 408 数据结构 哈夫曼
数据结构·考研·算法
POLITE31 小时前
Leetcode 41.缺失的第一个正数 JavaScript (Day 7)
javascript·算法·leetcode
CodeAmaz1 小时前
一致性哈希与Redis哈希槽详解
redis·算法·哈希算法
POLITE32 小时前
Leetcode 42.接雨水 JavaScript (Day 3)
javascript·算法·leetcode
Tim_102 小时前
【算法专题训练】36、前缀树路径和
算法