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].

思路:开始想用线段树,后来想想这个不是动态变化的没必要。

按区间的第一个值从小到大排序,然后跳过后面被覆盖的区间来找。

sort折腾了好久,开始搞不定只好自己写了一个归并排序。现在代码里的sort是可用的。

class Solution {
public:
vector<Interval> merge(vector<Interval> &intervals) {
//mysort(intervals, 0, intervals.size() - 1);
sort(intervals.begin(), intervals.end(), comp);
vector<Interval> ans;
Interval tmp;
for(int i = ; i < intervals.size(); i++) //找每个连续的区间
{
tmp.start = intervals[i].start;
int curmaxend = intervals[i].end; //注意这里要记录当前区间最大的那个值 因为有可能[1,100],[2,3]这样前面最大值比后面大
while(i + < intervals.size() && curmaxend >= intervals[i + ].start)
{
curmaxend = (intervals[i + ].end > curmaxend) ? intervals[i + ].end : curmaxend;
i++;
}
tmp.end = curmaxend;
ans.push_back(tmp);
}
return ans;
} void mysort(vector<Interval> &intervals, int s, int e)
{
if(s >= e) return; int m = (s + e) / ;
mysort(intervals, s, m);
mysort(intervals, m + , e);
merge(intervals, s, m, e);
} void merge(vector<Interval> &intervals, int s, int m, int e)
{
vector<Interval> left(intervals.begin() + s, intervals.begin() + m + );
vector<Interval> right(intervals.begin() + m + , intervals.begin() + e + ); int l = , r = , n = s;
while(l < left.size() && r < right.size())
{
intervals[n++] = (left[l].start < right[r].start) ? left[l++] : right[r++];
}
while(l < left.size())
{
intervals[n++] = left[l++];
}
while(r < right.size())
{
intervals[n++] = right[r++];
}
} static bool comp(const Interval& a, const Interval& b){
return a.start < b.start;
}
};

【leetcode】Merge Intervals(hard)的更多相关文章

  1. 【LeetCode】Merge Intervals 题解 利用Comparator进行排序

    题目链接Merge Intervals /** * Definition for an interval. * public class Interval { * int start; * int e ...

  2. 【leetcode】Merge Intervals

    Merge Intervals Given a collection of intervals, merge all overlapping intervals. For example,Given  ...

  3. 【leetcode】 Merge Intervals

    Merge Intervals Given a collection of intervals, merge all overlapping intervals. For example,Given  ...

  4. LeetCode: 56. Merge Intervals(Medium)

    1. 原题链接 https://leetcode.com/problems/merge-intervals/description/ 2. 题目要求 给定一个Interval对象集合,然后对重叠的区域 ...

  5. 【leetcode】Reverse Integer(middle)☆

    Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 总结:处理整数溢出 ...

  6. 【leetcode】Happy Number(easy)

    Write an algorithm to determine if a number is "happy". A happy number is a number defined ...

  7. 【leetcode】Reorder List (middle)

    Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do thi ...

  8. 【leetcode】Word Break (middle)

    Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separa ...

  9. 【leetcode】sort list(python)

    链表的归并排序 超时的代码 class Solution: def merge(self, head1, head2): if head1 == None: return head2 if head2 ...

随机推荐

  1. flask 项目的开发经验总结

    已经开发了几个flask项目, 是时候总结一下了, 这里涉及到项目源码的组织, 常用的包, 源码示例. =========================需要的 python 包有:========= ...

  2. [译]AngularJS中几种Providers(Factory, Service, Provider)的区别

    原文: http://blog.xebia.com/2013/09/01/differences-between-providers-in-angularjs/ 什么是Provider? Angula ...

  3. Windows Phone 8下 友盟社会化组件SDK的使用。

    由于项目的需要,要将友盟的社会化组件SDK由0.9更新至2.0. 版本变化比较大. 1.很多类以及命名空间已经取消了. 如UmengSocialSDK.Net.Request命名空间, UmengSo ...

  4. PHP 数组的遍历的几种方式(以及foreach与for/while+each效率的比较)

    * 使用foreach遍历数组时要注意的问题: * 1.foreach在遍历之前会自动重置指针使用其指向第一个元素,所以foreach可以多次遍历 * 2.foreach遍历完成之后,指针是没有指向数 ...

  5. springmvc 数据精准绑定

    因为使用dwz 的lookup功能,回调的值通过name以 xxx.xxValue 来自动得到,而我还有些表单数据的name是没有前缀的, 到springmvc后台绑定的的话默认的绑定是有问题的.这是 ...

  6. 【C语言入门教程】2.5 字符型数据

    字符型数据用于在计算机上保存字符编码和一些文本控制命令,多个字符型数据和字符串结束符组成的序列称为字符串.Linux 系统与其他大多数操作系统一样,支持 ASCII编码对字符编码,每个字符占用 1 个 ...

  7. 《Lua程序设计 第二版》学习笔记一

    Lua简介 Lua是一种简单.可拓展.可移植及高效的脚本语言. 开始 Lua之间不需要分隔符 运行方式: Linux下: lua -i prog dofile("lib1.lua" ...

  8. HDU 5047 Sawtooth(大数模拟)上海赛区网赛1006

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5047 解题报告:问一个“M”型可以把一个矩形的平面最多分割成多少块. 输入是有n个“M",现 ...

  9. BZOJ1367——[Baltic2004]sequence

    1.题目大意:给一个序列t,然后求一个序列z,使得$|z1-t1|+|z2-t2|+...+|zn-tn|$的值最小,我们只需要求出这个值就可以了,并且z序列是递增的 2.分析:这道题z序列是递增的, ...

  10. Unity路径规划

    Unity路径规划  转自:http://www.cnblogs.com/zsb517/p/4090629.html 背景 酷跑游戏中涉及到弯道.不规则道路. 找来一些酷跑游戏的案例来看,很多都是只有 ...