小白学习[leetcode]之435无重叠区间(贪心算法)

题目的链接在这里:https://leetcode-cn.com/problems/non-overlapping-intervals/


题目大意

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

注意:

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


一、示意图

在这里插入图片描述

二、解题思路

java实现(贪心算法)

代码如下:

class Solution {
    public int eraseOverlapIntervals(int[][] intervals) {
        if(intervals.length==0){
            return 0;
        }
      //这里的贪心策略就是,按照结尾小的区间进行排序,原因是在于,结尾越小,给别人的空间(也就是另一个的开头能取的范围就越大)
        int res=0;
        //所以第一步是对二维数组进行增量排序,并且是按照尾部的增量
        //这里是用了lambda表达式写的,对数组排序
        Arrays.sort(intervals,(a,b)->a[1]-b[1]);
        //排序之后就需要开始判断了,这就感觉和我之前那个写的一样了
        int i=0;
       //判断的方法也和我之前的不一样,刚开始的尾巴是这个
        int pre=intervals[0][1];
        for(i=1;i<intervals.length;i++) {
            if (intervals[i][0] < pre) {
                //如果当前值的前头小于之前的后面那个值
                res++;
            } else {//不然的话,就可以记录更新下去了
                pre = intervals[i][1];
            }
        }
        return res;
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值