[Leetcode] 435. Non-overlapping Intervals 解题报告
来源:互联网 发布:医技软件 编辑:程序博客网 时间:2024/05/16 03:05
题目:
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: 1Explanation: [1,3] can be removed and the rest of intervals are non-overlapping.
Example 2:
Input: [ [1,2], [1,2], [1,2] ]Output: 2Explanation: You need to remove two [1,2] to make the rest of intervals non-overlapping.
Example 3:
Input: [ [1,2], [2,3] ]Output: 0Explanation: You don't need to remove any of the intervals since they're already non-overlapping.
思路:
仔细分析可以知道这道题目其实是比较简单的,可以用贪心算法:首先对intervals进行排序,然后遍历:每当遇到重合区域时,我们需要erase一个interval,更新end为两个interval的更靠左者(这是本题思路的关键:如果当前interval的end更靠右,则意味着将要删除当前interval,否则意味着要删除的是前面的某个interval,由于intevals是有序的,所以可推出前面某个interval完全包含了当前interval,因此删除前面的这个interval是安全的);而如果没有重合,则直接更新end为新的interval的end即可。算法的时间复杂度是O(nlogn),这是由于排序的缘故所致;空间复杂度则为O(1)。
代码:
/** * 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) { if (intervals.size() == 0) { return 0; } sort(intervals.begin(), intervals.end(), IntervalComp); int end = intervals[0].end, ret = 0; for (int i = 1; i < intervals.size(); ++i) { if (intervals[i].start < end) { // need to erase, and we erase the one whose end is larger ++ret; end = min(intervals[i].end, end); } else { // do not need to erase, so we update the end end = intervals[i].end; } } return ret; }private: struct IntervalCompare { bool operator() (const Interval &a, const Interval &b) const { if (a.start < b.start) { return true; } else if (a.start > b.start) { return false; } else { return a.end < b.end; } } } IntervalComp;};
阅读全文
0 0
- [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
- LeetCode 435. Non-overlapping Intervals
- LeetCode 435. Non-overlapping Intervals
- 第十周项目4-线索化二叉树(中序)
- 第十周项目 1 — 验证算法 (1)层次遍历算法的验证
- git merge
- Android MVP与MVC
- opencv3.3 opencv_contrib安装
- [Leetcode] 435. Non-overlapping Intervals 解题报告
- vuex源码 安装依赖问题
- Struts2(五)---值栈
- makefile 文件
- 机器学习之集成学习Ensemble
- 【内网福音】如何离线部署Rancher
- leetcode 91. Decode Ways
- Eclipse中@Override报错
- java连接数据库