problem:

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

Hide Tags

Array Sort

题意:给定数组区间,合并有覆盖或者相邻的区间

thinking:

(1)一開始我想到用hash table的方法,开一个总区间跨度的数组。对于有区间覆盖的数组区间置为true。没被覆盖的数组区间置为false,最后将true区间的起点和终点作为区间输出就可以。

思路简单。可是,我忽略一个问题:区间跨度是不定的,所以要开的数组大小有可能非常大。提交也显示:Memory
Limit Exceeded

(2)换一种方法。排序法。

能够直接对vector<Interval> 数组排序,要重载compare函数。也能够使用multimap<int, int>,注意不是map

code:

排序法: Accepted

class Solution {
public:
vector<Interval> merge(vector<Interval> &intervals) {
vector<Interval> ret;
multimap<int,int> map_intervals;
if(intervals.size()==0)
return ret;
if(intervals.size()==1)
return intervals;
for(vector<Interval>::iterator it=intervals.begin();it!=intervals.end();it++)
map_intervals.insert(make_pair((*it).start,(*it).end));
multimap<int, int>::iterator p=map_intervals.begin();
Interval tmp(p->first,p->second);
for(multimap<int, int>::iterator k=++p;k!=map_intervals.end();k++)
{
if(k->first<=tmp.end)
tmp.end=max(tmp.end,k->second);
else
{
ret.push_back(tmp);
tmp.start=k->first;
tmp.end=k->second;
}
}
ret.push_back(tmp);
return ret;
}
};

hash table 法:Memory Limit Exceeded

class Solution {
public:
vector<Interval> merge(vector<Interval> &intervals) {
vector<Interval> ret;
int first=INT_MAX, last=INT_MIN;
for(vector<Interval>::iterator tmp=intervals.begin();tmp!=intervals.end();tmp++)
{
first=min((*tmp).start,first);
last=max((*tmp).end,last);
}
int count=last-first+1;
bool *a = new bool[count];
memset(a,false,sizeof(bool)*count);
for(vector<Interval>::iterator it=intervals.begin();it!=intervals.end();it++)
{
int num=(*it).end-(*it).start+1;
memset(a+(*it).start,true,sizeof(bool)*num);
}
int interval_start=0,interval_end=0;
while(interval_end<count)
{
interval_end=interval_start;
int index=0;
while(interval_start+index<count && a[index])
index++;
interval_end+=index-1;
Interval tmp_interval(interval_start,interval_end);
ret.push_back(tmp_interval);
if(interval_end<count)
{
int loc =interval_end+1;
while(loc<count && (!a[loc]))
loc++;
interval_start=loc;
}
} }
};

leetcode || 56、 Merge Intervals的更多相关文章

  1. LeetCode(56)Merge Intervals

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

  2. LeetCode OJ:Merge Intervals(合并区间)

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

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

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

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

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

  5. [Leetcode][Python]56: Merge Intervals

    # -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 56: Merge Intervalshttps://oj.leetcode. ...

  6. 【LeetCode】56. Merge Intervals

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

  7. 56. Merge Intervals - LeetCode

    Question 56. Merge Intervals Solution 题目大意: 一个坐标轴,给你n个范围,把重叠的范围合并,返回合并后的坐标对 思路: 先排序,再遍历判断下一个开始是否在上一个 ...

  8. 刷题56. Merge Intervals

    一.题目说明 题目是56. Merge Intervals,给定一列区间的集合,归并重叠区域. 二.我的做法 这个题目不难,先对intervals排序,然后取下一个集合,如果cur[0]>res ...

  9. 【题解】【区间】【二分查找】【Leetcode】Insert Interval & Merge Intervals

    Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...

随机推荐

  1. 利用 Puppet 实现自动化管理配置 Linux 计算机集群

    随着虚拟化和云计算技术的兴起,计算机集群的自动化管理和配置成为了数据中心运维管理的热点.对于 IaaS.Paas.Saas 来说,随着业务需求的提升,后台计算机集群的数量也会线性增加.对于数据中心的运 ...

  2. 深入理解Redis——(总纲)

    前言 Redis这个东西,我来来回回的也搞了好几遍,之前更偏向于实战,很多时候只知其然而不知其所以然,最近借阅了一本<深入理解Redis>,就系统的整理一下. 为何选择Redis 开源免费 ...

  3. POJ 2823 线段树 Or 单调队列

    时限12s! 所以我用了线段树的黑暗做法,其实正解是用单调队列来做的. //By SiriusRen #include <cstdio> #include <cstring> ...

  4. 网络流模板(模板题:POJ1273)

    模板题:POJ1273 EK: #include <queue> #include <cstdio> #include <cstring> #include < ...

  5. POJ 1523 Tarjan求割点

    SPF Description Consider the two networks shown below. Assuming that data moves around these network ...

  6. Python启动浏览器Firefox\Chrome\IE

    # -*- coding:utf-8 -*- import os import selenium from selenium import webdriver from selenium.webdri ...

  7. Halcon学习笔记之支持向量机(二)

    例程:classify_halogen_bulbs.hdev 在Halcon中模式匹配最成熟最常用的方式该署支持向量机了,在本例程中展示了使用支持向量机对卤素灯的质量检测方法.通过这个案例,相信大家可 ...

  8. cocos2d-x https

    cocos2d-x :2.1.3HttpClient.cpp文件中  bool configureCURL(CURL *handle)后边添加如下两句: curl_easy_setopt(handle ...

  9. 易企CMS主要模板文件介绍

    article.tpl 文章内容页模板 catalog.tpl 文章,产品目录页模板 category.tpl 分类页模板 comment.tpl 留言页模板 footer.tpl 页尾模板 head ...

  10. android黑科技系列——Wireshark和Fiddler分析Android中的TLS协议包数据(附带案例样本)

    一.前言 在之前一篇文章已经介绍了一款网络访问软件的破解教程,当时采用的突破口是应用程序本身的一个漏洞,就是没有关闭日志信息,我们通过抓取日志获取到关键信息来找到突破口进行破解的.那篇文章也说到了,如 ...