您的位置:首页 > 其它

Data Stream as Disjoint Interval | leetcode

2016-06-08 10:44 429 查看
/**
* 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 SummaryRanges {
public:
/** Initialize your data structure here. */
SummaryRanges() {
inters = vector<Interval>();
n=0;
//numbers = vector<int>();
}

void addNum(int val) {
++n;
vector<Interval>::iterator it=inters.begin();
while(it!=inters.end()){
int start=it->start;
int end=it->end;
if(val>=start&&val<=end)
break;
if(val==start-1){
it->start=val;
break;
}
if(val==end+1){
it->end=val;
break;
}
++it;
}
if(it==inters.end()){
Interval temp=Interval(val,val);
inters.push_back(temp);
}
}
static bool compare(Interval i1,Interval i2){
return i1.start<=i2.start;
}
vector<Interval> getIntervals() {
//conbine those intervals
sort(inters.begin(),inters.end(),compare);
for(int i=0;i<inters.size()-1;){
if(inters[i].end>=inters[i+1].start-1&&inters[i].end<=inters[i+1].end){
inters[i].end=inters[i+1].end;
inters.erase(inters.begin()+i+1);
}else
++i;
}

return inters;
}
private:
vector<Interval> inters;
int n;
//vector<int> numbers;
};

/**
* Your SummaryRanges object will be instantiated and called as such:
* SummaryRanges obj = new SummaryRanges();
* obj.addNum(val);
* vector<Interval> param_2 = obj.getIntervals();
*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode