【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 ...
随机推荐
- Backbone事件模块源码分析
事件模块Backbone.Events在Backbone中占有十分重要的位置,其他模块Model,Collection,View所有事件模块都依赖它.通过继承Events的方法来实现事件的管理,可以说 ...
- linux压缩排除
tar -zcvf www/la.tar.gz --exclude=www/uploadfile --exclude=www/databases --exclude=www/web_logs www ...
- JavaWeb学习总结(五十)——文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- 第31天 mvp
interactor调用接口 Activity包含Presenter,这样界面上的操作就会通知到Presenter. Presenter调用view接口, Activity实现view接口,这样Pre ...
- 网络编程2-UDP编程(DatagramSocket)
1.传输层有两个协议,一个是tcp协议,另一个是udp协议,tcp协议通过socket编程.udp通过数据报编程. UDP协议: (1)将数据.源地址.目的地址 封装成数据包,不需要建立链接 (2)每 ...
- webpack 教程 那些事儿03-webpack两大精华插件,热加载
本节主要讲述 webpack的两大经典开发调试插件,热插拔内存缓存机制 文章目录 1. html-webpack-plugin插件的使用 2. webpack-dev-middleware 插件登场 ...
- [lintcode] Binary Tree Maximum Path Sum II
Given a binary tree, find the maximum path sum from root. The path may end at any node in the tree a ...
- NFS和mount常用参数详解
NFS权限参数配置 ro 只读访问 rw 读写访问 sync 所有数据在请求时写入共享 async NFS在写入数据前可以相应请求 secure NFS通过1024以下的安全TCP/IP端口发送 in ...
- django的cookie 和session
Cookie 1.获取cookie: request.COOKIES['key'] request.get_signed_cookie(key, default=RAISE_ERROR, salt=' ...
- PHP+Hadoop实现数据统计分析
记一次完全独立完成的统计分析系统的搭建过程,主要用到了PHP+Hadoop+Hive+Thrift+Mysql实现 安装 Hadoop安装: http://www.powerxing.com/inst ...