【Leetcode贪心区间问题四】435. 无重叠区间

Leetcode435

1.问题描述

在这里插入图片描述

2.解决方案

思路概述:

说句实话这道题实际上难得鸭皮我感觉,咱们只能说多回来看,遇到类似的题目多往这边想!
1.首先就是遇到这题那必然想到要排序了,那到底应该怎么排序呢

在这里插入图片描述

2.然后排完序就该贪心了

在这里插入图片描述
在这里插入图片描述

3.代码实现呢就对比那张图就好了,找到一个最小的end之后,再找一个下一个非交叉并且end最小,然后累积数量,然后用总数减去就好


难点分析:

1.这道题难点在于思路这个最多非交叉区间怎么出来的,怎么说呢就这种题,首先我们要往贪心的方向去想,那么既然是贪心那一定是一点一点确定最终结果的,也就是存在一个慢慢来一个一个确定的过程(用官方话就是局部最优确定全局最优)
2.那么既然慢慢来,又是一个区间不难想象是整个并区间的开始遍历到末尾,如果符合就加入的一个做题感觉,所以说这么说就是想转变思路不是一下子确定答案
3.然后有了这个思路,我们就准备确定第一个非交叉区间,这时候千万注意不去想后面的区间,只是对于这个区间应该具备什么特点才能达到整体最多个数,是不是很好想,那就是区间末尾要越小越好,越小后面就会有更多空间,就是要分析到这,后面就好说了,那后面的区间也是一个道理只要是不交叉,区间末尾越小越好然后计数,结果自然而然就出来了!

在这里插入图片描述


代码实现:

class Solution {
public:
    static bool cmp(vector<int>& a,vector<int>& b){
        return a[1]<b[1];
    }
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
        sort(intervals.begin(),intervals.end(),cmp);
        int end=intervals[0][1];
        int count=1;
        for(int i=1;i<intervals.size();i++){
            if(end<=intervals[i][0]){
                end=intervals[i][1];
                count++;
            }
        }
        return intervals.size()-count;
    }
};
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值