博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 352. Data Stream as Disjoint Intervals
阅读量:4935 次
发布时间:2019-06-11

本文共 2144 字,大约阅读时间需要 7 分钟。

原题链接在这里:

题目:

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?

题解:

利用TreeMap<Integert, Interval> tm来保存每段Interval的start 和 Interval本身的对应关系. 

新值进来就看能不能连上已有的Interval.

Time Complexity: addNum, O(logn). getIntervals, O(n).

Space: O(n).

AC Java:

1 /** 2  * Definition for an interval. 3  * public class Interval { 4  *     int start; 5  *     int end; 6  *     Interval() { start = 0; end = 0; } 7  *     Interval(int s, int e) { start = s; end = e; } 8  * } 9  */10 class SummaryRanges {11     TreeMap
tm;12 /** Initialize your data structure here. */13 public SummaryRanges() {14 tm = new TreeMap
();15 }16 17 public void addNum(int val) {18 if(tm.containsKey(val)){19 return;20 }21 Integer l = tm.lowerKey(val);22 Integer r = tm.higherKey(val);23 if(l!=null && r!=null && tm.get(l).end+1==val && val+1==r){24 tm.get(l).end = tm.get(r).end;25 tm.remove(r);26 }else if(l!=null && tm.get(l).end+1>=val){27 tm.get(l).end = Math.max(val, tm.get(l).end);28 }else if(r!=null && val+1==r){29 tm.put(val, new Interval(val, tm.get(r).end));30 tm.remove(r);31 }else{32 tm.put(val, new Interval(val, val));33 }34 }35 36 public List
getIntervals() {37 return new ArrayList
(tm.values());38 }39 }40 41 /**42 * Your SummaryRanges object will be instantiated and called as such:43 * SummaryRanges obj = new SummaryRanges();44 * obj.addNum(val);45 * List
param_2 = obj.getIntervals();46 */

 

转载于:https://www.cnblogs.com/Dylan-Java-NYC/p/8440579.html

你可能感兴趣的文章
Dubbo和Zookerper的关系
查看>>
centos 5 系统安装MYSQL5.7
查看>>
docker数据卷(转)
查看>>
地图定位及大头针设置
查看>>
oracle常用小知识点
查看>>
CATransform3D参数的意义
查看>>
"外部组建发生错误"
查看>>
怎么自己在Objective-C中创建代理
查看>>
svn检出maven工程到eclipse里面,部署到tomcat的步骤
查看>>
Under Armour Drive 4 Performance Reviews
查看>>
C#操作目录和文件
查看>>
警惕数组的浅拷贝
查看>>
百度地图 导航
查看>>
SQLServer 错误: 15404,无法获取有关 Windows NT 组
查看>>
html5全局属性
查看>>
【转】Android Hook框架Xposed详解
查看>>
Android 有用代码片段总结
查看>>
英语各种时态例句
查看>>
从下往上看--新皮层资料的读后感 第三部分 70年前的逆向推演- 从NN到ANN
查看>>
(转)系统引导管理器GRUB详解
查看>>