[Leetcode] 352. Data Stream as Disjoint Intervals 解题报告
来源:互联网 发布:淘宝申请售后服务培训 编辑:程序博客网 时间:2024/06/08 06:55
题目:
Given a data stream input of non-negative integers a1, a2, ..., an, ..., summarize the numbers seen so far as a list of disjoint intervals.
For example, suppose the integers from the data stream are 1, 3, 7, 2, 6, ..., then the summary will be:
[1, 1][1, 1], [3, 3][1, 1], [3, 3], [7, 7][1, 3], [7, 7][1, 3], [6, 7]
Follow up:
What if there are lots of merges and the number of disjoint intervals are small compared to the data stream's size?
思路:
由于是数据流,所以我们无法提前对它们进行排序。这里的关键在于新加入一个数字之后,如何对现有的Intervals进行合并或者添加。我们的实现方法是维护一个Intervals的set。在新加入一个数字之后,我们首先在set中找到第一个比它大的Interval,然后从它的 前一个Interval开始进行合并。在合并过程中我们采取的策略是,一旦能够和下一个Interval连接上,就删掉下一个Interval。直到无法连接的时候,我们插入合并后的Interval。
代码:
/** * 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() { } void addNum(int val) { auto it = intervals.lower_bound(Interval(val, val)); int start = val, end = val; if(it != intervals.begin()) { --it; if(it->end + 1 < val) { ++it; } } while(it != intervals.end() && val + 1 >= it->start && val - 1 <= it->end) { start = min(start, it->start); end = max(end, it->end); it = intervals.erase(it); } intervals.insert(it, Interval(start, end)); } vector<Interval> getIntervals() { return vector<Interval>(intervals.begin(), intervals.end()); }private: struct IntervalCompare { bool operator() (const Interval &a, const Interval &b) { if(a.start < b.start) return true; else if(a.start > b.start) return false; else return a.end < b.end; } }; set<Interval, IntervalCompare> intervals;};/** * Your SummaryRanges object will be instantiated and called as such: * SummaryRanges obj = new SummaryRanges(); * obj.addNum(val); * vector<Interval> param_2 = obj.getIntervals(); */
阅读全文
0 0
- [leetcode] 352. Data Stream as Disjoint Intervals 解题报告
- [Leetcode] 352. Data Stream as Disjoint Intervals 解题报告
- leetcode.352. Data Stream as Disjoint Intervals
- [LeetCode]352. Data Stream as Disjoint Intervals
- leetcode 352. Data Stream as Disjoint Intervals
- [leetcode]352. Data Stream as Disjoint Intervals
- leecode 解题总结:352. Data Stream as Disjoint Intervals
- 【leetcode】Data Stream as Disjoint Intervals
- leetcode:Data Stream as Disjoint Intervals(352)
- LeetCode #352: Data Stream as Disjoint Intervals
- LeetCode—352. Data Stream as Disjoint Intervals
- LeetCode 352. Data Stream as Disjoint Intervals(数据流区间)
- leetcode 352. Data Stream as Disjoint Intervals 学习TreeSet
- 352. Data Stream as Disjoint Intervals
- 352. Data Stream as Disjoint Intervals
- 352. Data Stream as Disjoint Intervals
- 352. Data Stream as Disjoint Intervals
- Data Stream as Disjoint Intervals
- 笨办法学 Python · 续 练习 32:扫描器
- Remember-Me功能
- 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN
- Python中 如何将一个字符串分成一个个字符;
- Fraction Addition and Subtraction
- [Leetcode] 352. Data Stream as Disjoint Intervals 解题报告
- 网易技术笔试题整理
- Hdu6108 小C的倍数问题(2017"百度之星"程序设计大赛
- centos6.8安装python3.5.1
- 《深入理解java虚拟机》第一章一点细节
- stm32 输入捕获
- 51nod 1675 序列变换 莫比乌斯反演
- Git 常用操作(入门级)
- acm练习:素数求和问题