题目描述
352. 将数据流变为多个不相交区间
AC代码
class SummaryRanges {
public:
map<int,int> L,R;
/** Initialize your data structure here. */
SummaryRanges() {
}
void addNum(int x) {
if(L.size()){
auto it=L.lower_bound(x);
if(it!=L.end()&&it->second<=x) return;
}
int left=L.count(x-1),right=R.count(x+1);
//第一种情况:左边和右边都存在
if(left&&right){
//x-1的左边界的这个数,其右边界设置为x+1的右边界
R[L[x-1]]=R[x+1];
//x+1的右边界的这个数,其左边界设置为x-1的左边界
L[R[x+1]]=L[x-1];
L.erase(x-1);
R.erase(x+1);
}
else if(left){
//第二种情况:左边存在,右边不存在
R[L[x-1]]=x;
L[x]=L[x-1];
L.erase(x-1);
}
else if(right){
//第三种情况:左边不存在,右边存在
L[R[x+1]]=x;
R[x]=R[x+1];
R.erase(x+1);
}else{
//第四种情况:左边和右边都不存在
R[x]=L[x]=x;
}
}
vector<vector<int>> getIntervals() {
vector<vector<int>> res;
for(auto x:R){
res.push_back({x.first,x.second});
}
return res;
}
};
/**
* Your SummaryRanges object will be instantiated and called as such:
* SummaryRanges* obj = new SummaryRanges();
* obj->addNum(val);
* vector<vector<int>> param_2 = obj->getIntervals();
*/