Tuesday, September 17, 2013

merge intervals@leetcode

微博:http://www.weibo.com/cathyhwzn

刷题必备书籍:Cracking the Coding Interview: 150 Programming Questions and Solutions
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:
vector<Interval> insert(vector<Interval>&intervals, Interval newInterval)
{
vector<Interval>::iterator it=intervals.begin();
while(it!=intervals.end())
{
if(newInterval.end<it->start)
{
intervals.insert(it, newInterval);
return intervals;
}
else if(newInterval.start>it->end)
{
it++;
continue;
}
else
{
newInterval.start=std::min(newInterval.start, it->start);
newInterval.end=std::max(newInterval.end, it->end);
it=intervals.erase(it);
}
}
intervals.insert(intervals.end(), newInterval);
return intervals;
}
vector<Interval> merge(vector<Interval> &intervals) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<Interval> res;
vector<Interval>::iterator it=intervals.begin();
while(it!=intervals.end())
{
insert(res,*it);
it++;
}
return res;
}
};
view raw merge intervals hosted with ❤ by GitHub

No comments:

Post a Comment

Leetcode 316. Remove Duplicate Letters

 这道题表面问的是如何删除重复,实际在问如何从多个字符选取一个保留,从而让整个字符串按升序排列。那么策略就是对于高顺位的字符比如‘a',就要选靠前位置的保留,而低顺位字符如’z'则应该尽量选取靠后位置保留。 算法大概思路:每看到一个字符,我们要决定是否保留 1. ...