Leetcode:435. Non-overlapping Intervals (week 9)
来源:互联网 发布:淘宝精装修教程pdf 编辑:程序博客网 时间:2024/06/05 02:18
Description:
Given a collection of intervals, find the minimum number of intervals you need to remove to make the rest of the intervals non-overlapping.
Note:
You may assume the interval’s end point is always bigger than its start point.
Intervals like [1,2] and [2,3] have borders “touching” but they don’t overlap each other.
Example 1:
Input: [ [1,2], [2,3], [3,4], [1,3] ]
Output: 1
Explanation: [1,3] can be removed and the rest of intervals are non-overlapping.Example 2:
Input: [ [1,2], [1,2], [1,2] ]
Output: 2
Explanation: You need to remove two [1,2] to make the rest of intervals non-overlapping.Example 3:
Input: [ [1,2], [2,3] ]
Output: 0
Explanation: You don’t need to remove any of the intervals since they’re already non-overlapping.
解题思路及算法分析
题意是要移除重叠区间,结果返回为移除的最小区间数。本题可用贪心算法解决,以每个元素的end为关键元素排序,end相等的情况下,按start升序排序。本题跟“只有一个场地,要安排尽量多的活动“类似。贪心规则:尽量安排结束时间早的活动。如果后面的活动与已经安排好的兼容,则加入集合。时间复杂度为O(n).
注意的是排序时调用sort要自定义排序条件
代码
/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s), end(e) {} * }; */class Solution {public: static bool cmp(Interval a, Interval b) { if (a.end <= b.end) { if (a.end < b.end) { return true; } return a.start <= b.start; } return false; } int eraseOverlapIntervals(vector<Interval>& intervals) { int size = intervals.size(); if(size == 0) {return 0;} int count = 0;//移除的区间数 sort(intervals.begin(),intervals.end(),cmp); int g = intervals[0].end;//必须是排完序后的第一个区间 for (int i = 1; i < size; i++) { if (intervals[i].start < g) { count++; } else g = intervals[i].end; } return count; }};
或者可以将start排序,代码如下
/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s), end(e) {} * }; */class Solution {public: int eraseOverlapIntervals(vector<Interval>& intervals) { int size = intervals.size(); if(size == 0) return 0; int count = 0;//移除的区间数 int g = 0; sort(intervals.begin(),intervals.end(),[](Interval a, Interval b) { return a.start < b.start; }); for (int i = 1; i < size; i++) { if (intervals[i].start < intervals[g].end) { count++; if (intervals[i].end < intervals[g].end) g = i; } else { g = i; } } return count; }};
- Leetcode:435. Non-overlapping Intervals (week 9)
- [leetcode 435. Non-overlapping Intervals] medium|week 8
- LeetCode 435. Non-overlapping Intervals
- leetcode 435. Non-overlapping Intervals
- [Leetcode] 435. Non-overlapping Intervals
- 【LeetCode】 435. Non-overlapping Intervals
- Leetcode 435. Non-overlapping Intervals
- LeetCode 435. Non-overlapping Intervals
- [leetcode]435. Non-overlapping Intervals
- leetcode-435. Non-overlapping Intervals
- [LeetCode]435. Non-overlapping Intervals
- Leetcode 435. Non-overlapping Intervals
- LeetCode 435. Non-overlapping Intervals
- LeetCode 435. Non-overlapping Intervals
- 【LeetCode】435. Non-overlapping Intervals
- LeetCode 435. Non-overlapping Intervals
- LeetCode 435. Non-overlapping Intervals
- LeetCode 435. Non-overlapping Intervals
- -TEST 18 for NOIP 。。。(0-300)
- 【Linux内核】led子系统(1)
- 丘成桐演讲全文:工程上取得很大发展,但理论基础仍非常薄弱,人工智能需要一个可被证明的理论作为基础
- java-方法覆盖问题
- IOS添加手动对焦功能
- Leetcode:435. Non-overlapping Intervals (week 9)
- 变量的原型链和this的指向
- ⑤NDK学习之C语言结构体struct
- 【Linux内核】led子系统(2)
- 简单的01背包 HDU
- ⑥NDK学习之C语言结构体struct例子
- 总结
- 【Linux内核】led子系统(3)
- "=="和equals方法的区别