Leetcode 56.Merge Intervals
来源:互联网 发布:关于初中语文的软件 编辑:程序博客网 时间:2024/06/02 01:22
Leetcode题目: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].
分析:
这是Leetcode排序题中的一道,属于medium难度,主要就是将单个数据排序拓展为由两个数据组成的区间的排序与合并。其实本质上是一样的,关键是先将它转化成普通排序问题,然后再根据区间之间的包含、交叉、不相交三种情况进行区间合并,就非常简单了!
具体做法:
step1: 把所有intervals按start的值升序排列。
step2: 遍历所有相邻interval,比较当前interval的start值和之前最大的end值的大小,从而确定区间之间的包含、交叉、不相交关系,将包含或交叉的区间合并。
C++代码
#include <iostream>#include <vector>#include <algorithm>using namespace std;struct Interval { int start; int end; Interval() : start(0), end(0) {} Interval(int s, int e) : start(s), end(e) {} };/*自定义vector的排序函数,用区间的左值来先从小到大排序*/ bool less_first(const Interval& in1, const Interval& in2){ return in1.start < in2.start;}class Solution {public: vector<Interval> merge(vector<Interval>& intervals) { if (intervals.empty()) return intervals; //单独处理读入空区间的情况 /*把所有区间按左值start从小到大排序*/ sort(intervals.begin(), intervals.end(), less_first); vector<Interval> new_intervals; int start = intervals[0].start; int end = intervals[0].end; for (int i = 1; i < intervals.size(); i++){ /*两区间不相交*/ if (intervals[i].start > end){ Interval new_interval(start, end); new_intervals.push_back(new_interval); //将确定好的前一个区间push到新区间序列里 start = intervals[i].start; end = intervals[i].end; } /*两区间相交的前提下,判断是包含还是交叉,从而确定end的值*/ else{ end = end > intervals[i].end ? end : intervals[i].end; } } /*生成最后的一个区间并放到区间序列的末尾*/ Interval new_interval(start, end); new_intervals.push_back(new_interval); return new_intervals; }};
阅读全文
1 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
- Java动态代理之JDK动态代理
- 2017 ACM/ICPC Asia Regional Shenyang Online:transaction transaction transaction
- JDBC数据库访问技术
- 总有人记得
- 图算法小结
- Leetcode 56.Merge Intervals
- 正则表达式学习记录(持续更新)
- 《Netty学习》(七)EventLoop学习
- Windows10下安装GPU版本的Tensorflow
- 反汇编分析之:虚函数,虚表,多态
- Linux(CentOS 7_x64位)系统下安装DOCK6.8
- 沈阳网络赛小结
- 利用ffmpeg批量转码视频
- 由于GIL,Python想做多任务,最好在多核上用多进程方式实现