Java中等题-无重叠区间(力扣)

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

示例 1:

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

示例 2:

复制代码
输入: intervals = [ [1,2], [1,2], [1,2] ]
输出: 2
解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。

示例 3:

复制代码
输入: intervals = [ [1,2], [2,3] ]
输出: 0
解释: 你不需要移除任何区间,因为它们已经是无重叠的了。

方法一:(可能会导致超时)使用动态规划

先将原数组按照左端点排序,用一个数组f[i]表示以第i个区间为最后一个区间的最多的不重叠区间个数。

java 复制代码
class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        if (intervals.length == 0) {
            return 0;
        }
        
        Arrays.sort(intervals, new Comparator<int[]>() {
            public int compare(int[] interval1, int[] interval2) {
                return interval1[0] - interval2[0];
            }
        });

        int n = intervals.length;
        int[] f = new int[n];
        Arrays.fill(f, 1);
        for (int i = 1; i < n; ++i) {
            for (int j = 0; j < i; ++j) {
                if (intervals[j][1] <= intervals[i][0]) {
                    f[i] = Math.max(f[i], f[j] + 1);
                }
            }
        }
        return n - Arrays.stream(f).max().getAsInt();
    }
}

作者:力扣官方题解
链接:https://leetcode.cn/problems/non-overlapping-intervals/solutions/541543/wu-zhong-die-qu-jian-by-leetcode-solutio-cpsb/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

方法二:使用贪心算法

先将原数组按照右端点排序, 设第一个区间为满足不重叠条件的最后一个区间,然后从第一个区间开始往后移动,如果后面的区间不与这个区间重叠,就把后一个区间作为满足不重叠条件的最后一个区间。

java 复制代码
class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        int n=intervals.length;
        if(n==0){
            return 0;
        }
        Arrays.sort(intervals, new Comparator<int[]>() {
            @Override
            public int compare(int[] intervals1, int[] intervals2) {
                return intervals1[1]-intervals2[1];
            }
        });

        int ans=1;
        int right=intervals[0][1];
        for(int i=1;i<n;i++){
            if(intervals[i][0]>=right){
                right=intervals[i][1];
                ans++;
            }
        }
        return n-ans;

    }
}
相关推荐
_院长大人_6 分钟前
Spring Boot 客户端设计示例:自动刷新 Token 并重试接口调用(Springboot Starter 封装)
java·spring boot·后端
卷到起飞的数分12 分钟前
19.Spring Boot原理1
java·spring boot·后端
碧波bibo13 分钟前
【算法突破】【C++】 第一篇 数组
c++·算法
消失的旧时光-194314 分钟前
彻底理解 synchronized:实例锁、类锁与自定义锁的原理和最佳实践
java·开发语言
开源之眼25 分钟前
github star 较多的Java双亲委派机制【类加载的核心内容加星】
java
编程火箭车27 分钟前
【Java SE 基础学习打卡】19 运算符(中)
java·java入门·运算符·编程基础·赋值运算符·复合赋值·自增自减
是一个Bug27 分钟前
Spring事件监听器源码深度解析
java·数据库·spring
蜂蜜黄油呀土豆32 分钟前
ThreadLocal 深度解析:它解决了什么、原理是什么、如何正确使用(含代码与实战建议)
java·并发编程·内存泄漏·threadlocal
45288655上山打老虎34 分钟前
【智能指针】
开发语言·c++·算法
毕设源码-郭学长36 分钟前
【开题答辩全过程】以 高校教室管理系统为例,包含答辩的问题和答案
java·spring boot