【leetcode】Merge Intervals(hard)
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)的更多相关文章
- 【LeetCode】Merge Intervals 题解 利用Comparator进行排序
题目链接Merge Intervals /** * Definition for an interval. * public class Interval { * int start; * int e ...
- 【leetcode】Merge Intervals
Merge Intervals Given a collection of intervals, merge all overlapping intervals. For example,Given ...
- 【leetcode】 Merge Intervals
Merge Intervals Given a collection of intervals, merge all overlapping intervals. For example,Given ...
- LeetCode: 56. Merge Intervals(Medium)
1. 原题链接 https://leetcode.com/problems/merge-intervals/description/ 2. 题目要求 给定一个Interval对象集合,然后对重叠的区域 ...
- 【leetcode】Reverse Integer(middle)☆
Reverse digits of an integer. Example1: x = 123, return 321Example2: x = -123, return -321 总结:处理整数溢出 ...
- 【leetcode】Happy Number(easy)
Write an algorithm to determine if a number is "happy". A happy number is a number defined ...
- 【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 ...
- 【leetcode】Word Break (middle)
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separa ...
- 【leetcode】sort list(python)
链表的归并排序 超时的代码 class Solution: def merge(self, head1, head2): if head1 == None: return head2 if head2 ...
随机推荐
- JavaWeb学习总结(五十)——文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- nyoj 236心急的C小加 动态规划( java)
sort函数用法: #include<algorithm> using namespace std; sort(a,a+len;cmp) //a-->数组名, len-- ...
- 微信小程序开放公测了 晚上又可以通宵搞代码了
就在刚刚22:15分,微信公众平台的服务号发来好消息说小程序开放公测了,喜大普奔啊!!!码农们晚上又可以通宵搞测试了.之前还猜测16日微信小论坛小程序专场上会公布,没想到提前了那么多天,效率挺高的,而 ...
- poj.1703.Find them, Catch them(并查集)
Find them, Catch them Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I6 ...
- 编译CDH Spark源代码
如何编译CDH Spark源代码 经过漫长的编译过程(我编译了2个半小时),最终成功了,在assembly/target/scala-2.10目录下面有spark-assembly-1.0.0-cdh ...
- Linux下安装和配置JDK与Tomcat(入门版)
JDK路径:/usr/java/jdk1.6.0_25 Tomcat路径:/usr/local/apache-tomcat 1. 下载jdk6.0(选择“.rpm.bin”结尾的,6u25版本) ht ...
- android Home键和返回键
在Android中,当按下Home键,默认情况下stop前台的actiity,即activity设置成onstop,而不是ondestory.如果再次启动该activity不是调用onCreate,而 ...
- tomcat 虚拟节点
<Context path=”Welcome” docBase=”c:\hello\hello” reloadable=”true” /> contex指上下文,实际上就是一个web项目: ...
- input多选计算
CSS代码: body { counter-reset: icecream; } input:checked { counter-increment: icecream; } .total::afte ...
- Mysql字段操作—增加字段、删除字段、修改字段名、修改字段类型(约束条件)
1.增加字段: alter table tablename add new_field_id type not null default '0'; 例: a ...