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

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. Winpcap网络编程十之Winpcap实战,两台主机通过中间主机通信

    注:源码等等的我不会全然公开的,此篇文章写出来为大家的网络编程或者课程设计提供一定的思路.. 好,本次我们须要完毕的任务是: 完毕两台主机通过中间主机的数据通信(网络层) 添加基于IP地址的转发功能 ...

  2. 关于 pthread_cond_wait 和 pthread_cond_signal , signal 无效的问题

    关于一个消费者模式,,,引起的问题.. 我在io线程里不断的把一个函数调用放到队列里 然后ruby线程就不断的从这个队列里取出函数之争并运行. 典型的 消费者模式. 我曾经以为是这样... 这是wor ...

  3. SGU 548 Dragons and Princesses

    意甲冠军: n个月格儿  所有的格龙或公主的儿子  从勇士1走n  不杀  杀死有钱拿  路过公主  假设之前杀龙的数量满足公主要求就会停止行走  问  勇士想多拿钱  可是必需要满足n格子的公主  ...

  4. Tomcat通过JNDI方式链接MySql数据库

    原文:Tomcat通过JNDI方式链接MySql数据库 拷贝MySQL的JDBC驱动到Tomcat的lib路径下 配置全局数据源或者单个Web应用的局部数据源 局部数据源 在Tomcat的conf/C ...

  5. (大数据工程师学习路径)第二步 Vim编辑器----Vim文档编辑

    一.vim重复命令 1.重复执行上次命令 在普通模式下.(小数点)表示重复上一次的命令操作 拷贝测试文件到本地目录 $ cp /etc/protocols . 打开文件进行编辑 $ vim proto ...

  6. 深和学习导航CSS样式

    一个很容易理解,具体导航栏CSS授课风格 诚奉献给朋友: 原文地址:点击这里.

  7. Scrapy研究和探索(五岁以下儿童)——爬行自己主动多页(抢别人博客所有文章)

    首先.在教程(二)(http://blog.csdn.net/u012150179/article/details/32911511)中,研究的是爬取单个网页的方法.在教程(三)(http://blo ...

  8. HDU 4349 Xiao Ming&#39;s Hope

    非常无语的一个题. 反正我后来看题解全然不是一个道上的. 要用什么组合数学的lucas定理. 表示自己就推了前面几个数然后找找规律. C(n, m) 就是 组合n取m: (m!(n-m!)/n!) 假 ...

  9. async和await关键字实现异步编程

    async和await关键字实现异步编程 异步编程   概念 异步编程核心为异步操作,该操作一旦启动将在一段时间内完成.所谓异步,关键是实现了两点:(1)正在执行的此操作,不会阻塞原来的线程(2)一旦 ...

  10. obj-c编程04:类的继承

    这第4篇内容比較少,主要说的是obj-c中的类的继承,须要说明的是我仅仅是写了继承中最简单的形式,假设所有展开来说,那就多了去了!关键是如今肚子里还没装够墨水,没法展开啊! 以下的代码中,我们写了2个 ...