题目:给定一连串的区间,要求输出不重叠的区间。

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

这题主要会要知道如何对一个node型或者是struct进行排序。就是如何定义sort的比较函数,sort的比较函数本来默认的是小于函数,现在给定的struct类型没有定义的小于函数,所以要自己定义一个。根据左区间排序。

定义好后,进行排序,排好序后,扫面一次判断下一个的开头和前一个的结尾的大小,如果下一个开头大,那么前面一个就是分离的区间,记录答案。如果下一个的开头不比上一个的结尾大,那么就有重叠了,这时候就判断下一个的结尾是否比前一个的结尾大,大的话就替代它。所以我们要有一个指针指向保存了答案的vector的末尾,以便于和下一个开头判断。

/**
* 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 {
private:
static bool myCmp(Interval a, Interval b)
{
return a.start < b.start;
}
public:
vector<Interval> merge(vector<Interval> &intervals)
{
if(intervals.empty()) return intervals;
sort(intervals.begin(), intervals.end(), myCmp);
vector<Interval> ans;
int cnt = ;
while(cnt < intervals.size() )
{
Interval tmp;
tmp = intervals[cnt];
while(cnt + < intervals.size() && intervals[cnt + ].start <= tmp.end )
{
if (intervals[cnt + ].end >= tmp.end)
{tmp.end = intervals[cnt + ].end;cnt++;}
else cnt++; // 排除下一个区间已经被上一个区间包围的例子
}
cnt++;// 记得要再加一,从下一个开始
ans.push_back(tmp);
}
return ans;
}
};

更详细请参见这位

/**
* 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 {
private:
static bool comp(Interval a, Interval b)
{
return a.start < b.start;
}
public:
vector<Interval> merge(vector<Interval> &intervals) {
if(intervals.empty())return intervals;
sort(intervals.begin(), intervals.end(), comp);
vector<Interval> res;
res.push_back(intervals[]);
for(int i = ; i < intervals.size(); i++)
{
Interval &p = res.back(); // 找到末尾,为了和下一个开头比较
if(intervals[i].start > p.end)res.push_back(intervals[i]);
else if(intervals[i].end > p.end)p.end = intervals[i].end;
}
return res;
}
};

leetcode[55] Merge Intervals的更多相关文章

  1. [Leetcode Week2]Merge Intervals

    Merge Intervals题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/merge-intervals/description/ Descript ...

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

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

  3. 【leetcode】Merge Intervals

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

  4. 【leetcode】Merge Intervals(hard)

    Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,1 ...

  5. 【leetcode】 Merge Intervals

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

  6. leetcode 56. Merge Intervals 、57. Insert Interval

    56. Merge Intervals是一个无序的,需要将整体合并:57. Insert Interval是一个本身有序的且已经合并好的,需要将新的插入进这个已经合并好的然后合并成新的. 56. Me ...

  7. LeetCode 56. Merge Intervals (合并区间)

    Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,1 ...

  8. LeetCode: 56. Merge Intervals(Medium)

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

  9. Java for LeetCode 056 Merge Intervals

    Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6],[8, ...

随机推荐

  1. Unity带有网络功能——创建服务,并连接到一个特定的服务

    游戏本身需要在网络上创建服务,然后其他的游戏能够连接到这个服务,此外真实场景现在玩同样的游戏效果一起. 该方法是创建一个服务呼叫Network.InitializeServer( ): 是Networ ...

  2. C++11于once_flag,call_once分析的实现

    基于该分析llvm的libc++,代替gun的libstdc++,由于libstdc++的代码里太多宏了,看起来蛋疼. 在多线程编程中,有一个常见的情景是某个任务仅仅须要运行一次.在C++11中提供了 ...

  3. 一个关于Linux Bridge配置的吐嘈

    话说有些事情十分适合在放假前的一天折腾一天,但绝对不适合在你准备去吃饭前多看一眼...我上周就碰到了这么一件揪心的事,终于以低血糖收场.十分狼狈地四处觅食,却觅到了一包超级辣的鸡爪.吃完后感觉症状加重 ...

  4. GMSK调制仿真

    GMSK 调制的的原理非常简单. 就是MSK调制前进行Gauss滤波. 在实现中有这样的方法,首先产生高斯系数,对称的上升陂和下降陂系数.输入一个符号,进行上采样,经过高斯滤波器,滤波器的输出做有符号 ...

  5. Parse 和 Swift 搭建一个像 Instagram

    如何用 Parse 和 Swift 搭建一个像 Instagram 那样的应用?   [编者按]本篇文章作者是Reinder de Vries,既是一名企业家,也是优秀的程序员,发表多篇应用程序的博客 ...

  6. Javascript学习1 - Javascript中的类型对象

    原文:Javascript学习1 - Javascript中的类型对象 1.1关于Numbers对象. 常用的方法:number.toString() 不用具体介绍,把数字转换为字符串,相应的还有一个 ...

  7. oracle 11g 自己主动调整

    --:自己主动调教计划 begin   dbms_workload_repository.create_snapshot(); end; select /*+ result_cache */ coun ...

  8. css+html简单的布局demo

    于html介绍css作风.可以改变html块状布局,局更加美观.接下来看一个基础布局的小样例: <html> <head> <meta http-equiv=" ...

  9. 前端学习笔记(zepto或jquery)—— 布局技巧(一)

    html5中有一些标签我们很难改变其样式,例如input=file,select等.这个时候我们需要改变一下思路,将原有透明度置为0,借助于div或span等以控制样式的标签来代替. 效果图: < ...

  10. C# WinForm开发系列 - WebBrowser

    原文:C# WinForm开发系列 - WebBrowser 介绍Vs 2005中带的WebBrowser控件使用以及一些疑难问题的解决方法, 如如何正确显示中文, 屏蔽右键菜单, 设置代理等; 收集 ...