将数据流变为多个不相交区间 - C++力扣352题
题目链接:https://leetcode.com/problems/data-stream-as-disjoint-intervals/description/
解题思路
这个题目难度其实不应该算是困难,个人感觉像是中等难度,因为确实想不到有什么很好的解法了。其实就是弄一个有序集合,然后当执行 addNum
的时候就插入到集合, getIntervals
的时候就遍历一遍,大概就是 $O(\log n)$ 和 $O(n)$ 的时间复杂度复杂度,并不算太难。
完整代码:
class SummaryRanges {
public:
set<int> s;
SummaryRanges() {
}
void addNum(int value) {
s.insert(value);
}
vector<vector<int>> getIntervals() {
int left = *s.begin(), right = *s.begin();
vector<vector<int>> ans;
for(auto it = ++s.begin(); it != s.end(); it++) {
if(*it == right + 1) {
right = *it;
} else {
ans.push_back({left, right});
left = *it;
right = *it;
}
}
ans.push_back({left, right});
return ans;
}
};
/**
* Your SummaryRanges object will be instantiated and called as such:
* SummaryRanges* obj = new SummaryRanges();
* obj->addNum(value);
* vector<vector<int>> param_2 = obj->getIntervals();
*/
版权属于:江筱雨
本文链接:https://www.yuisblog.com/archives/221/
本站未注明转载的文章均为原创,并采用
CC BY-NC-SA 4.0 授权协议,转载请注明来源,谢谢!