首页 > 其他 > 详细

【题解】【区间】【二分查找】【Leetcode】Insert Interval & Merge Intervals

时间:2014-02-20 04:50:12      阅读:351      评论:0      收藏:0      [点我收藏+]

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

思路:

Insert IntervalMerge Intervals的一个延伸问题,先看看怎么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].

bubuko.com,布布扣
 1 vector<Interval> merge(vector<Interval> &intervals) {
 2     if(intervals.size() <= 1)
 3         return intervals;
 4         
 5     vector<Interval> vres;
 6     sort(intervals.begin(), intervals.end(), intvalcomp);//先对interval排序
 7     Interval tmp(intervals[0]);
 8     for(Interval it:intervals){
 9         if(tmp.start == it.start){
10             tmp.end = it.end;
11         }else if(tmp.end >= it.start){//intervals有序,必然有tmp.start < it->start
12             if(tmp.end < it.end)//直接无视后者{[1,4],[2,3]}
13                 tmp.end = it.end;//直接吞并后者{[1,3],[2,4]}
14         }else{
15             vres.push_back(tmp);//不相交
16             tmp = it;
17         }
18     }
19     vres.push_back(tmp);//漏掉这句会fail{[1,4],[1,4]}
20     return vres;
21 }
22 
23 bool intvalcomp(Interval a, Interval b){
24     if(a.start == b.start)
25         return a.end < b.end;
26     else
27         return a.start < b.start;
28 }
bubuko.com,布布扣

现在有了这个Merge好了的不相交区间序列,怎么进行插入呢?新序列按照start排好序(start肯定是各不相同的),第一步我们先用二分找出有交集的序列片段的开始,这一点很像Search Insert Position,然后再往后处理。

【题解】【区间】【二分查找】【Leetcode】Insert Interval & Merge Intervals

原文:http://www.cnblogs.com/wei-li/p/InsertIntervalandMergeIntervals.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!