leetcode || 56、 Merge Intervals
problem:
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的更多相关文章
- LeetCode(56)Merge Intervals
题目 Given a collection of intervals, merge all overlapping intervals. For example, Given [1,3],[2,6], ...
- LeetCode OJ:Merge Intervals(合并区间)
Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8, ...
- 【LeetCode】Merge Intervals 题解 利用Comparator进行排序
题目链接Merge Intervals /** * Definition for an interval. * public class Interval { * int start; * int e ...
- leetcode 56. Merge Intervals 、57. Insert Interval
56. Merge Intervals是一个无序的,需要将整体合并:57. Insert Interval是一个本身有序的且已经合并好的,需要将新的插入进这个已经合并好的然后合并成新的. 56. Me ...
- [Leetcode][Python]56: Merge Intervals
# -*- coding: utf8 -*-'''__author__ = 'dabay.wang@gmail.com' 56: Merge Intervalshttps://oj.leetcode. ...
- 【LeetCode】56. Merge Intervals
Merge Intervals Given a collection of intervals, merge all overlapping intervals. For example,Given ...
- 56. Merge Intervals - LeetCode
Question 56. Merge Intervals Solution 题目大意: 一个坐标轴,给你n个范围,把重叠的范围合并,返回合并后的坐标对 思路: 先排序,再遍历判断下一个开始是否在上一个 ...
- 刷题56. Merge Intervals
一.题目说明 题目是56. Merge Intervals,给定一列区间的集合,归并重叠区域. 二.我的做法 这个题目不难,先对intervals排序,然后取下一个集合,如果cur[0]>res ...
- 【题解】【区间】【二分查找】【Leetcode】Insert Interval & Merge Intervals
Given a set of non-overlapping intervals, insert a new interval into the intervals (merge if necessa ...
随机推荐
- CruiseControl.NET 的安装与配置
CC.NET 是 CruiseControl.NET 的简称,官方网站在这里. 官方的定义是自动连续集成服务, 使用Microsoft .NET Framework实现. 另外它还有Java的版本叫做 ...
- OI知识点
- (转载)实例详解Android快速开发工具类总结
实例详解Android快速开发工具类总结 作者:LiJinlun 字体:[增加 减小] 类型:转载 时间:2016-01-24我要评论 这篇文章主要介绍了实例详解Android快速开发工具类总结的相关 ...
- Android开放百度地图集成
1.创建应用 获取AK (我理解为Application key) 通过百度账号登录百度地图开放平台,进入API控制台 http://lbsyun.baidu.com/apiconsole/key ...
- 【SQL】INTERVAL YEAR TO MONTH 和 INTERVAL DAY TO SECOND
INTERVAL YEAR TO MONTH: 作为年和月的时间间隔存储 INTERVAL DAY TO SECOND: 作为天.小时.分和秒的时间间隔存储(DAY,HOUR,MINUTE,SECON ...
- 国外AI界牛人主页 及资源链接
感觉 好博客要收集,还是贴在自己空间里难忘!!! 原文链接:http://blog.csdn.net/hitwengqi/article/details/7907366 http://people.c ...
- 【sqli-labs】 less32 GET- Bypass custom filter adding slashes to dangrous chars (GET型转义了'/"字符的宽字节注入)
转义函数,针对以下字符,这样就无法闭合引号,导致无法注入 ' --> \' " --> \" \ --> \\ 但是,当MySQL的客户端字符集为gbk时,就可能 ...
- 学习网址Collect
Laravel 学院 https://laravelacademy.org/wx小程序 https://developers.weixin.qq.com/miniprogram/dev/quic ...
- MySQL+Keepalived实现主主高可用方案
Mysql主主高可用方案 master配置 [root@master ~]# yum -y install keepalived [root@master ~]# vim /etc/keepalive ...
- BZOJ 1705: [Usaco2007 Nov]Telephone Wire 架设电话线 DP + 优化 + 推导
Description 最近,Farmer John的奶牛们越来越不满于牛棚里一塌糊涂的电话服务 于是,她们要求FJ把那些老旧的电话线换成性能更好的新电话线. 新的电话线架设在已有的N(2 <= ...