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]
.
class Solution {
public:
#define max 0xFFFFFF
vector<Interval> merge(vector<Interval> &intervals) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<Interval> ret;
bitset<max> *axe=new bitset<max>(0);
for(int i=0 ; i<intervals.size() ; i++){
for(int j=intervals[i].start ; j<=intervals[i].end ; j++)
axe->set(j);
}
for(int i=0 ; i<axe->size() ; ){
if(axe->test(i)){
Interval temp;
temp.start=i;
for( i++ ; axe->test(i) ; i++);
temp.end=i-1;
ret.push_back(temp);
}
else
i++;
}
return ret;
}
};
可惜leetcode里面不可以使用bitset,不然的话这样就可以了,当然了,这道题目还有一种更常规的做法,一般大家都是用这种做法的,这种做法需要去排序:
class Solution {
public:
class comp{
public:
bool operator()(const Interval& left, const Interval& right){
if(left.start!=right.start)
return left.start<right.start;
else
return left.end<right.end;
}
};
vector<Interval> merge(vector<Interval> &intervals) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
vector<Interval> ret;
if(intervals.size()==0)
return ret;
sort(intervals.begin(),intervals.end(),comp());
ret.push_back(intervals[0]);
int k=0;
for(int i=1 ; i<intervals.size() ; i++){
if(intervals[i].start>ret[k].end){
ret.push_back(intervals[i]);
k++;
}
else{
ret[k].end=max(ret[k].end,intervals[i].end);
}
}
return ret;
}
};