leetcode 56:Merge Intervals
2015-11-18 19:27
381 查看
题目:
Given a collection of intervals, merge all overlapping intervals.
For example,
Given
return
思路:
可以先对集合进行排序,时间复杂度:O(nlgn)
然后依次将end大于下一个start的集合合起来,知道出现end小于下一个start,将新的集合push到结果中。
注意边界条件,即下一个集合是前一个的子集的情况。时间复杂度:O(n)
总时间复杂度为:O(nlgn)
实现如下:
注意:本题对sort的使用。由于sort第三个参数对应函数的地址,如果函数不加上static,则会报错。
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].
struct Interval { int start; int end; Interval() : start(0), end(0) {} Interval(int s, int e) : start(s), end(e) {} };
思路:
可以先对集合进行排序,时间复杂度:O(nlgn)
然后依次将end大于下一个start的集合合起来,知道出现end小于下一个start,将新的集合push到结果中。
注意边界条件,即下一个集合是前一个的子集的情况。时间复杂度:O(n)
总时间复杂度为:O(nlgn)
实现如下:
class Solution { public: static bool comp(const Interval a, const Interval b) { return a.start < b.start ? 1 : 0; } vector<Interval> merge(vector<Interval>& intervals) { vector<Interval> result; int size = intervals.size(); if (size < 2) return intervals; sort(intervals.begin(), intervals.end(), comp); for (int i = 0; i<size; ++i) { Interval temp(intervals[i].start, intervals[i].end); int high = intervals[i].end; while (i < size - 1 && high >= intervals[i + 1].start) { if (intervals[i + 1].end > high) high = intervals[i + 1].end; ++i; } temp.end = high; result.push_back(temp); } return result; } };
注意:本题对sort的使用。由于sort第三个参数对应函数的地址,如果函数不加上static,则会报错。
相关文章推荐
- vmware虚拟机Linux增加硬盘
- JS递归函数和函数的callee属性
- jQuery实现侧边导航手风琴效果
- 带下划线的按钮
- Color the ball
- DSP生成hex文件、生成bin文件方法
- 网络吞吐量
- (转载)使用Links方法安装Eclipse插件
- Visual Studio中 ATL CLR MFC Win32 区别
- 容易被忽视的Linux磁盘配额设置
- 常用的mysql命令
- collectionview头部悬浮
- 思路超简单的Android Socket 通信 Demo 注释详细
- 创建android项目时没有自动生成R.java文件的解决方法
- VS编程中_T与L的区别
- android 通过Camera和Surfaceview实现照相 图片预览 保存图片到本地 手动聚焦 FaceDetectionListener实现人脸识别
- CentOS linux 高可用集群之heartbeat
- nyoj--747--蚂蚁的难题(三)(dp背包)
- Linux下mysql安装和一些基础操作
- [LeetCode]Longest Substring Without Repeating Characters