Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LeetCode 435. 无重叠区间(贪心/动态规划)

LeetCode 435. 无重叠区间(贪心/动态规划)

作者头像
Michael阿明
发布于 2020-07-13 06:31:22
发布于 2020-07-13 06:31:22
1.1K00
代码可运行
举报
运行总次数:0
代码可运行

1. 题目

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
示例 1:
输入: [ [1,2], [2,3], [3,4], [1,3] ]
输出: 1
解释: 移除 [1,3] 后,剩下的区间没有重叠。

示例 2:
输入: [ [1,2], [1,2], [1,2] ]
输出: 2
解释: 你需要移除两个 [1,2] 来使剩下的区间没有重叠。

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

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/non-overlapping-intervals 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

2.1 贪心

  • 按照结束位置升序排序
  • 找到 满足prev[end] <= next[start]的下一个,更新prev为next
  • 寻找下一个next,这些找到的是无重叠的最长的区间长度
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
    	if(intervals.empty()) return 0;
    	sort(intervals.begin(), intervals.end(),[&](auto a, auto b){
    		return a[1] < b[1];
    	});
    	int i, count = 1, n = intervals.size();
        vector<int> prev(intervals[0]);
    	for(i = 1; i < n; ++i)
    	{
    		if(prev[1] <= intervals[i][0])
    		{
    			count++;
    			prev = intervals[i];
    		}
    	}
    	return n-count;
    }
};

2.2 动态规划

  • 按照区间的起点位置升序排序
  • 然后状态方程
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
class Solution {
public:
    int eraseOverlapIntervals(vector<vector<int>>& intervals) {
    	if(intervals.empty()) return 0;
        sort(intervals.begin(), intervals.end(),[&](auto a, auto b){
    		return a[0] < b[0];
    	});
    	vector<int> dp(intervals.size(),1);
        int i, j, maxlen = 1;
        for(i = 1; i < intervals.size(); ++i)
        {
            j = i-1;
            while(j>=0 && intervals[j][1] > intervals[i][0])
                j--;
            if(j >= 0)
                dp[i] = max(dp[i], dp[j]+1);
            maxlen = max(maxlen, dp[i]);
        }
        return intervals.size()-maxlen;
    }
};

168 ms 25.3 MB

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/05/16 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【区间贪心】合并区间 / 无重叠区间 / 用最少数量的箭引爆气球 / 俄罗斯套娃信封问题
贪心策略:我们在射箭的时候,要发挥每一支箭最大的作用,应该把互相重叠的区间统一引爆。
_小羊_
2025/04/09
430
【区间贪心】合并区间 / 无重叠区间 / 用最少数量的箭引爆气球 / 俄罗斯套娃信封问题
数字问题-LeetCode 435、436、441、442、443、445、448(数字)
示例 1: 输入: [ [1,2], [2,3], [3,4], [1,3] ] 输出: 1 解释: 移除 [1,3] 后,剩下的区间没有重叠。
算法工程师之路
2020/02/13
5830
Leetcode|中等|区间贪心|56. 合并区间
1 贪心算法一次遍历 重叠则合并 不重叠则添加 class Solution { public: static bool cmp(const vector<int>& a, const vector<int>& b) { return a[0] < b[0]; } vector<vector<int>> merge(vector<vector<int>>& intervals) { if (intervals.empty()) return {
SL_World
2021/09/18
3130
​LeetCode刷题实战56:合并区间
https://leetcode-cn.com/problems/merge-intervals/
程序员小猿
2021/01/20
2610
​LeetCode刷题实战56:合并区间
​关关的刷题日记99 – Leetcode 56. Merge Intervals
关关的刷题日记99 – Leetcode 56. Merge Intervals 题目 Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8,10],[15,18], return [1,6],[8,10],[15,18]. 题目的意思是给出一个区间集合,让我们合并所有重叠区间。 思路 首先我们要对集合进行从小到大排序,因为区间是自己定义的数据结构,所以我们要
WZEARW
2018/04/13
5850
​LeetCode刷题实战436:寻找右区间
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/11/15
2590
156. 合并区间先排序再处理
给出若干闭合区间,合并所有重叠的部分。 样例 给出的区间列表 => 合并后的区间列表:
和蔼的zhxing
2018/09/04
4920
LeetCode 0056 - Merge Intervals
Given a collection of intervals, merge all overlapping intervals.
Reck Zhang
2021/08/11
1860
​LeetCode刷题实战435:无重叠区间
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2021/11/15
3350
为了得到无重叠区间,煞费苦心
力扣题目链接:https://leetcode-cn.com/problems/non-overlapping-intervals
代码随想录
2021/12/09
3220
为了得到无重叠区间,煞费苦心
无重叠区间——贪心算法
题解:又是给了一组数组,问之间有无重叠区间,显然可以考虑将其排序之后,逐个比较,考虑局部最优解,符合贪心算法思想
用户8639654
2021/08/24
2970
Leetcode|中等|区间贪心|435. 无重叠区间
1 区间终点贪心 没啥好说的,贪心算法中最简单的题,《算法设计与分析》教科书中贪心章节的第一道典例 class Solution { private: static bool cmp(const vector<int>& a, const vector<int>& b) { return a[1] < b[1]; } public: int eraseOverlapIntervals(vector<vector<int>>& intervals) {
SL_World
2021/09/18
4660
Leetcode大大,对不起你,我把你当成测试平台了
给定一个区间的集合 intervals ,其中 intervals[i] = [starti, endi] 。返回 需要移除区间的最小数量,使剩余区间互不重叠 。
小码匠
2022/06/16
2560
Leetcode大大,对不起你,我把你当成测试平台了
【LeetCode】56. 合并区间
输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6]. 示例 2:
韩旭051
2020/06/23
4050
leetcode归并排序_什么是区间
以数组 intervals 表示若干个区间的集合,其中单个区间为 intervals[i] = [starti, endi] 。请你合并所有重叠的区间,并返回一个不重叠的区间数组,该数组需恰好覆盖输入中的所有区间。
全栈程序员站长
2022/09/22
2110
435. 无重叠区间(思维)
题目链接:https://leetcode-cn.com/problems/non-overlapping-intervals/submissions/
Ch_Zaqdt
2020/02/17
5900
LeetCode 253. 会议室 II(贪心+优先队列)
给定一个会议时间安排的数组,每个会议时间都会包括开始和结束的时间 [[s1,e1],[s2,e2],…] (si < ei), 为避免会议冲突,同时要考虑充分利用会议室资源,请你计算至少需要多少间会议室,才能满足这些会议安排。
Michael阿明
2020/07/13
6.9K0
leetcode-56-合并区间
* Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s), end(e) {}
chenjx85
2018/08/30
6290
LeetCode 435. 无重叠区间
https://leetcode-cn.com/problems/non-overlapping-intervals/
freesan44
2021/11/14
4850
LeetCode 435. 无重叠区间
程序员进阶之算法练习(三十二)LeetCode专场
题目链接 题目大意: 给出一个链表RandomListNode *next, *random; 每个节点有int值,有两个指针,一个指向下一个节点,一个指向链表的任意节点; 现在实现一个深度复制,复制节点的next、random、还有int值;
落影
2018/08/10
4480
相关推荐
【区间贪心】合并区间 / 无重叠区间 / 用最少数量的箭引爆气球 / 俄罗斯套娃信封问题
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验