leetcode 56. Merge Intervals 、57. Insert Interval
56. Merge Intervals是一个无序的,需要将整体合并;57. Insert Interval是一个本身有序的且已经合并好的,需要将新的插入进这个已经合并好的然后合并成新的。
56. Merge Intervals
思路:先根据start升序排序,然后合并
static作用:https://www.cnblogs.com/songdanzju/p/7422380.html
之间写的一个较为复杂的代码
/**
* 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 {
public:
vector<Interval> merge(vector<Interval>& intervals) {
vector<Interval> result;
int length = intervals.size();
if(length <= )
return result;
sort(intervals.begin(),intervals.end(),cmp);
result.push_back(intervals[]);
for(int i = ;i < length;i++){
int st = intervals[i].start;
int en = intervals[i].end;
if(st <= result.back().end){
Interval tmp(result.back().start,en);
if(en >= result.back().end){
result.pop_back();
result.push_back(tmp);
}
else
continue;
}
else
result.push_back(intervals[i]);
}
return result;
}
static bool cmp(Interval a,Interval b){
return a.start < b.start;
}
};
http://www.cnblogs.com/grandyang/p/4370601.html
一个更加简洁的代码:
实际上合并的时候,只用考虑两个问题,一是两个有没有交集,即判断前一个的end是否大于后一个的start,如果没有交集直接加入就好了;二是如果有交集,如何合并,首先每一对本身肯定是start小于end,并且排序是根据start升序排的,所以合并之后的start就是前一个的start,而end则取两者的最大的end就好。
class Solution {
public:
vector<vector<int>> merge(vector<vector<int>>& intervals) {
vector<vector<int>> result;
if(intervals.empty())
return result;
sort(intervals.begin(),intervals.end(),cmp);
result.push_back(intervals[]);
for(int i = ;i < intervals.size();i++){
if(result.back()[] < intervals[i][])
result.push_back(intervals[i]);
else
result.back()[] = max(result.back()[],intervals[i][]);
}
return result;
}
static bool cmp(vector<int> a,vector<int> b){
return a[] < b[] ? true : false;
}
};
57. Insert Interval
http://www.cnblogs.com/grandyang/p/4367569.html解法一
这个题可以有一个简单的思路,就是把新的interval按大小插入到原来的intervals组成新的intervals,然后使用merge intervals的方法,但这种方法要使用两个result数组,空间使用的更多。
现在这种方法,只用使用一个result数组。
思路:将跟新interval没有交集的先加入result,然后用新interval合并剩下所有跟他有交集的合并成一个更新的interval然后加入result,最后把剩下的没有交集的加入result中。
第一个while是找没有交集
第二个while是找交集,所以这个判断条件注意一下。
合并的操作代码是:
newInterval[] = min(intervals[cur][],newInterval[]);
newInterval[] = max(intervals[cur][],newInterval[]);
第二个max和56. Merge Intervals使用的是一样的,第一个min之所以这样操作,主要是第一个cur的小值可能在intervals,也可能在newInterval中,后面的小值都在newInterval中
class Solution {
public:
vector<vector<int>> insert(vector<vector<int>>& intervals, vector<int>& newInterval) {
vector<vector<int>> result;
if(intervals.empty() && newInterval.empty())
return result;
int cur = ,n = intervals.size();
while(cur < n && intervals[cur][] < newInterval[])
result.push_back(intervals[cur++]);
while(cur < n && newInterval[] >= intervals[cur][]){
newInterval[] = min(intervals[cur][],newInterval[]);
newInterval[] = max(intervals[cur][],newInterval[]);
cur++;
}
result.push_back(newInterval);
while(cur < n)
result.push_back(intervals[cur++]);
return result;
}
};
leetcode 56. Merge Intervals 、57. Insert Interval的更多相关文章
- [LeetCode] 56. Merge Intervals(vector sort)
/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0 ...
- LeetCode 56. Merge Intervals (合并区间)
Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,1 ...
- 合并区间 · Merge Intervals & 插入区间 · Insert Interval
[抄题]: 给出若干闭合区间,合并所有重叠的部分. 给出的区间列表 => 合并后的区间列表: [ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10] ...
- LeetCode: 56. Merge Intervals(Medium)
1. 原题链接 https://leetcode.com/problems/merge-intervals/description/ 2. 题目要求 给定一个Interval对象集合,然后对重叠的区域 ...
- Leetcode#56 Merge Intervals
原题地址 排序+合并,没啥好说的 第一次尝试C++的lambda表达式,有种写js的感觉,很神奇 c11就支持了lambda表达式,仔细想想,我学C++大概就是在09~10年,c11还没有发布,不得不 ...
- [LeetCode] 56. Merge Intervals 解题思路
Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,1 ...
- [LeetCode] 56 - Merge Intervals 合并区间
Given a collection of intervals, merge all overlapping intervals. For example,Given [1,3],[2,6],[8,1 ...
- [leetcode]56. Merge Intervals归并区间
Given a collection of intervals, merge all overlapping intervals. Example 1: Input: [[1,3],[2,6],[8, ...
- LeetCode 56. Merge Intervals 合并区间 (C++/Java)
题目: Given a collection of intervals, merge all overlapping intervals. Example 1: Input: [[1,3],[2,6] ...
随机推荐
- FPGA开发时钟资源评估需要考虑的问题
在第一个独立开发的FPGA项目中,使用了Altera平台的三速以太网IP,工作在100M模式下,外部输入的PHY时钟频率为25MHz. 由于在前期没有注意这个外部输入的时钟,导致最后不得不在板子上飞线 ...
- SQL Server设置启动存储过程
--设置开关 启动程序自动运行存储过程必须启动该命令 sp_configure "show advanced options",1; go reconfigure; go --设置 ...
- shell统计mysql当前连接数
[root@push-- scripts]# mysql -S /var/lib/mysql//mysql.sock -uroot -phlsms_push_Zaq1xsw@ -e "sho ...
- java高并发核心要点|系列5|CPU内存伪共享
上节提到的:伪共享,今天我们来说说. 那什么是伪共享呢? 这得从CPU的缓存结构说起.以下如图,CPU一般来说是有三级缓存,1 级,2级,3级,越上面的,越靠近CPU的,速度越快,成本也越高.也就是说 ...
- python变量与常量内容:
''' python变量与常量内容: ''' # 变量:定义世间万物变化的状态 ''' height 180 weight 140 age 18 tree_name yuyang ''' # prin ...
- php基于websocket实现的在线聊天室
听说websocket技术可以实现 1.
- Idea创建多模块依赖Maven项目
idea 创建多模块依赖Maven项目 本来网上的教程还算多,但是本着自己有的才是自己的原则,还是自己写一份的好,虽然可能自己也不会真的用得着. 1. 创建一个新maven项目 2. 3. 输入g ...
- xgboost使用细节
from http://blog.csdn.net/zc02051126/article/details/46771793 在Python中使用XGBoost 下面将介绍XGBoost的Python模 ...
- 【leetcode】Heaters
Winter is coming! Your first job during the contest is to design a standard heater with fixed warm r ...
- postman批量调用接口并发测试
本文出自:https://www.cnblogs.com/2186009311CFF/p/11425913.html 接口测试在开发中很容易遇到,下面是请教别人学会的并发测试,希望能帮到需要用到的你, ...