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

题目描述

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

题目示例

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

解题思路

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

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

参考代码

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;
    }
}

相关推荐

  1. 435. 重叠区间(贪心)

    2024-01-28 04:02:03       36 阅读
  2. -435.重叠空间

    2024-01-28 04:02:03       35 阅读
  3. LeetCode-435重叠区间(贪心)

    2024-01-28 04:02:03       36 阅读
  4. 435. 重叠区间

    2024-01-28 04:02:03       21 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-28 04:02:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-28 04:02:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-28 04:02:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-28 04:02:03       18 阅读

热门阅读

  1. [力扣 Hot100]Day14 合并区间

    2024-01-28 04:02:03       36 阅读
  2. 【每日一题】YACS P817:两数归零

    2024-01-28 04:02:03       36 阅读
  3. 题目 1022: [编程入门]筛选N以内的素数

    2024-01-28 04:02:03       33 阅读
  4. 【模板】拓扑排序

    2024-01-28 04:02:03       37 阅读
  5. ·迭代器模式

    2024-01-28 04:02:03       29 阅读