352. Data Stream as Disjoint Intervals
题目:
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?
解答:
这题用Maptree会通过map.lowerKey, map.higherKey很快定位到当前数所处在哪两个interval之间,从而进行高效的比较与合并。
/
Definition for an interval.
public class Interval {
int start;
int end;
Interval() { start = 0; end = 0; }
Interval(int s, int e) { start = s; end = e; }
}
/
public class SummaryRanges {
TreeMap map;
/ Initialize your data structure here. /
public SummaryRanges() {
map = new TreeMap();
}public void addNum(int val) {
if (map.containsKey(val)) return;
Integer l = map.lowerKey(val);
Integer h = map.higherKey(val);
if (l != null && h != null && map.get(l).end + 1 == val && val + 1 == map.get(h).start) {
map.get(l).end = map.get(h).end;
map.remove(h);
} else if (l != null && val getIntervals() {
return new ArrayList(map.values());
}
}
/
- Your SummaryRanges object will be instantiated and called as such:
- SummaryRanges obj = new SummaryRanges();
- obj.addNum(val);
- List param_2 = obj.getIntervals();
*/
关键字:leetcode, java, map, val
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!