leetcode 56. Merge Intervals
来源:互联网 发布:淘宝二手官网 编辑:程序博客网 时间:2024/06/03 20:47
这是一道知道技巧就能比较容易解决的题。题目要求对于给出的各个区间,如果有区间出现重叠,那就将它们合并。题意很容易理解,但是乍一看会觉得难以用编程来实现。直接能想到的方法比如不停地遍历整个区间的集合,如果发现有交叠就合并,直到没有交叠。这种方法比较费时,实现起来也不容易。其实虽然现在做的算法题不多,但是先排个序就能让问题变简单的题目不少。这题也是如此。
对于这道算法题,可以先按每个区间的下界从小到大排个序,然后遍历整个集合,如果发现下一集合和这个集合有交集就合并(对于合并操作,只需要设置两个变量记录区间的下界和上界即可,存入结果集合时才根据它们进行区间的实例化),如果没有交集就说明已经得到一个最终的合并的区间,于是可以将上一次合并的区间保存。遍历结束之后,再将得到的最后一个区间保存。这样就大功告成了。
/** * 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: bool static cmp(const Interval& a, const Interval& b) { return a.start < b.start; } vector<Interval> merge(vector<Interval>& intervals) { vector<Interval> result; // 当集合大小小于等于1,不可能会有交集 if (intervals.size() <= 1) { result = intervals; return result; } // 根据自定义的比较函数对集合中区间结构体进行排序 sort(intervals.begin(), intervals.end(), cmp); int lastEnd = intervals[0].end; // 用于记录当前操作的区间的下界 int lastStart = intervals[0].start; // 用于记录区间的下界 for (int i = 1; i < intervals.size(); i++) { // 有交集,则进行合并操作 if (intervals[i].start <= lastEnd) { if (intervals[i].end > lastEnd) { lastEnd = intervals[i].end; } } else { // 没有交集,根据之前记录的上界下界实例化区间并保存 result.push_back(Interval(lastStart, lastEnd)); lastEnd = intervals[i].end; lastStart = intervals[i].start; } } // 将最后一个没保存的区间保存 result.push_back(Interval(lastStart, lastEnd)); return result; }};
阅读全文
0 0
- [LeetCode]56.Merge Intervals
- 56. Merge Intervals Leetcode
- LeetCode --- 56. Merge Intervals
- LeetCode 56.Merge Intervals
- [Leetcode] 56. Merge Intervals
- [leetcode] 56.Merge Intervals
- 【leetcode】56. Merge Intervals
- [leetcode] 56.Merge Intervals
- **LeetCode 56. Merge Intervals
- LeetCode 56. Merge Intervals
- leetcode 56. Merge Intervals
- 【LeetCode】56. Merge Intervals
- LeetCode 56. Merge Intervals
- 【leetcode】56. Merge Intervals
- leetcode 56. Merge Intervals
- leetcode.56. Merge Intervals
- [LeetCode] 56. Merge Intervals
- leetcode 56. Merge Intervals
- linux服务mariadb
- sql server 中的隐形符号(不是空格的空字符)
- Struts2标签库
- 如何让自己的Android studio更加的个性化--Code Templates、SexyEditor
- PANDAS 数据合并与重塑(concat篇)
- leetcode 56. Merge Intervals
- Spark之RDD的Transformation操作
- HBase体系结构剖析--上
- Spring中bean注入初始化方式—通过注解@Configuration @bean
- NOIP 2017 普及组 成绩 score
- group by分组后获得每组中时间最大的那条记录
- 一文读懂NLP系列(附代码)
- SpringBoot中常见注解含义总结
- python3 爬取网页表格例子