博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
56. Merge Intervals 57. Insert Interval *HARD*
阅读量:4556 次
发布时间:2019-06-08

本文共 3672 字,大约阅读时间需要 12 分钟。

1. Merge

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

/** * 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:    static bool compare(Interval a, Interval b)    {        if(a.start != b.start)            return a.start < b.start;        return a.end < b.end;    }    vector
merge(vector
& intervals) { sort(intervals.begin(), intervals.end(), compare); vector
v; int n = intervals.size(), i; if(n<1) return v; for(i = 0; i < n; i++) { if(v.size() && intervals[i].start <= v[v.size()-1].end) v[v.size()-1].end = max(intervals[i].end, v[v.size()-1].end); else v.push_back(intervals[i]); } return v; }};

 

2. Insert

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

You may assume that the intervals were initially sorted according to their start times.

Example 1:

Given intervals [1,3],[6,9], insert and merge [2,5] in as [1,5],[6,9].

Example 2:

Given [1,2],[3,5],[6,7],[8,10],[12,16], insert and merge [4,9] in as [1,2],[3,10],[12,16].

This is because the new interval [4,9] overlaps with [3,5],[6,7],[8,10].

(1) 用上面的merge方法

/** * 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:    static bool compare(Interval a, Interval b)    {        if(a.start != b.start)            return a.start < b.start;        return a.end < b.end;    }    vector
merge(vector
& intervals) { sort(intervals.begin(), intervals.end(), compare); vector
v; int n = intervals.size(), i; if(n<1) return v; for(i = 0; i < n; i++) { if(v.size() && intervals[i].start <= v[v.size()-1].end) v[v.size()-1].end = max(intervals[i].end, v[v.size()-1].end); else v.push_back(intervals[i]); } return v; } vector
insert(vector
& intervals, Interval newInterval) { intervals.push_back(newInterval); return merge(intervals); }};

 

(2)

/** * 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
insert(vector
& intervals, Interval newInterval) { int n = intervals.size(), l, i; vector
v; for(i = 0; i < n; i++) { if(newInterval.start > intervals[i].end) v.push_back(intervals[i]); else break; } if(i >= n) { v.push_back(newInterval); return v; } l = v.size(); v.push_back(intervals[i]); if(newInterval.start < v[l].start) v[l].start = newInterval.start; while(i < n && newInterval.end > intervals[i].end) i++; if(i
= intervals[i].start) v[l].end = intervals[i++].end; else v[l].end = newInterval.end; while(i

 

转载于:https://www.cnblogs.com/argenbarbie/p/5266607.html

你可能感兴趣的文章
android mvn android:deploy签名问题
查看>>
transient
查看>>
[HDU 4348]To the moon
查看>>
初识【Windows API】--文本去重
查看>>
[转]IOS多线程
查看>>
详解spl_autoload_register() 与 __autoload
查看>>
Axure RP Extension for Chrome安装
查看>>
day_10
查看>>
ArcGIS API for JavaScript 入门教程[6] 再讲数据——Map类之可操作图层
查看>>
tfs2012 的体验地址
查看>>
打造专业外观-九宫图
查看>>
让discuz论坛单独版块贴子侧边栏(用户信息栏)关闭的修改办法
查看>>
倒计时
查看>>
Robolectric
查看>>
搜索引擎之全文搜索算法功能实现(基于Lucene)
查看>>
XShell远程连接本地虚机
查看>>
好吧,又失眠
查看>>
一个不错的cv个人主页
查看>>
20159206《网络攻防实践》第十二周学习总结
查看>>
'Upgrade' header is missing
查看>>