Leetcode-435-无重叠区间(区间调度、贪心)

一、题目

给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。

注意:
可以认为区间的终点总是大于它的起点。
区间 [1,2] 和 [2,3] 的边界相互“接触”,但没有相互重叠。
示例 1:

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

https://leetcode-cn.com/problems/non-overlapping-intervals/

二、解题思路

整体思路

区间调度问题的特点:
给出很多形如[start, end]的闭区间,算出这些区间中最多有几个互不相交的区间。
本质是求最大不相交子集。
参考//www.greatytc.com/p/46628652f533

关键问题

1、找到最多不会重叠的区间
2、(全部区间个数)-(最多不会重叠区间个数)=(最小移除区间个数)

三、题解

暴力解法、动态规划解法
https://leetcode-cn.com/problems/non-overlapping-intervals/solution/wu-zhong-die-qu-jian-by-leetcode/

题解1: 区间调度

Java题解

class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        int n = intervals.length;
        if (n == 0){
            return 0;
        }
        return n - helper(intervals);
    }
    private int helper(int[][] intervals){
        Arrays.sort(intervals, new Comparator<int[]>(){
            public int compare(int[] a, int[] b){
                return a[1] - b[1];
            }
        });
        int x_end = intervals[0][1];
        int count = 1, start = 0;
        for (int[] invs : intervals){
            start = invs[0];
            if (start >= x_end){
                count++;
                x_end = invs[1];
            }
        }
        return count;
    }
}
参考

1、区间调度知识点讲解https://labuladong.gitbook.io/algo/dong-tai-gui-hua-xi-lie/tan-xin-suan-fa-zhi-qu-jian-tiao-du-wen-ti

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。