352. 将数据流变为多个不相交区间

给你一个由非负整数 a1, a2, …, an 组成的数据流输入,请你将到目前为止看到的数字总结为不相交的区间列表。

实现 SummaryRanges 类:

  • SummaryRanges() 使用一个空数据流初始化对象。
  • void addNum(int val) 向数据流中加入整数 val 。
  • int[][] getIntervals() 以不相交区间 [starti, endi] 的列表形式返回对数据流中整数的总结。
示例:输入:
["SummaryRanges", "addNum", "getIntervals", "addNum", "getIntervals", "addNum", "getIntervals", "addNum", "getIntervals", "addNum", "getIntervals"]
[[], [1], [], [3], [], [7], [], [2], [], [6], []]
输出:
[null, null, [[1, 1]], null, [[1, 1], [3, 3]], null, [[1, 1], [3, 3], [7, 7]], null, [[1, 3], [7, 7]], null, [[1, 3], [6, 7]]]解释:
SummaryRanges summaryRanges = new SummaryRanges();
summaryRanges.addNum(1);      // arr = [1]
summaryRanges.getIntervals(); // 返回 [[1, 1]]
summaryRanges.addNum(3);      // arr = [1, 3]
summaryRanges.getIntervals(); // 返回 [[1, 1], [3, 3]]
summaryRanges.addNum(7);      // arr = [1, 3, 7]
summaryRanges.getIntervals(); // 返回 [[1, 1], [3, 3], [7, 7]]
summaryRanges.addNum(2);      // arr = [1, 2, 3, 7]
summaryRanges.getIntervals(); // 返回 [[1, 3], [7, 7]]
summaryRanges.addNum(6);      // arr = [1, 2, 3, 6, 7]
summaryRanges.getIntervals(); // 返回 [[1, 3], [6, 7]]

解题思路

使用优先队列维护有序的数据流,当需要获得不相交的区间时,我们可以遍历优先队列,判断有序的数据流可以组成的不相交区间

代码

    class SummaryRanges {PriorityQueue<Integer> pq = new PriorityQueue<>();public SummaryRanges() {}public void addNum(int val) {pq.add(val);}public int[][] getIntervals() {int pre = pq.poll(), s = pre;List<int[]> list = new ArrayList<>();while (!pq.isEmpty()) {Integer cur = pq.poll();if (cur==pre) continue;if (cur == pre + 1) {pre++;} else {list.add(new int[]{s,pre});s=pre=cur;}}list.add(new int[]{s,pre});int j=0;int[][] res=new int[list.size()][2];for (int[] ints : list) {for (int i=ints[0];i<=ints[1];i++)pq.add(i);res[j++]=ints;}return res;}}/*** Your SummaryRanges object will be instantiated and called as such:* SummaryRanges obj = new SummaryRanges();* obj.addNum(val);* int[][] param_2 = obj.getIntervals();*/

352. 将数据流变为多个不相交区间相关推荐

  1. LeetCode 352. 将数据流变为多个不相交区间(map二分查找)

    文章目录 1. 题目 2. 解题 1. 题目 给定一个非负整数的数据流输入 a1,a2,-,an,-,将到目前为止看到的数字总结为不相交的区间列表. 例如,假设数据流中的整数为 1,3,7,2,6,- ...

  2. 【数据结构与算法】之深入解析“将数据流变为多个不相交区间”的求解思路与算法示例

    一.题目要求 给你一个由非负整数 a1, a2, -, an 组成的数据流输入,请你将到目前为止看到的数字总结为不相交的区间列表. 实现 SummaryRanges 类: SummaryRanges( ...

  3. 树上问题 ---- Codeforces Round #722 (Div. 1) C. Trees of Tranquillity [dfs序区间的性质+最大不相交区间的性质]

    题目链接 题目大意: 解题思路: 1.首先我们知道最大团里面的点全都是S树的一条路径上的点,但是也要满足在K树上不存在祖先关系. 2.对于祖先关系,我们发现对于一棵树上的dfs序,他们是包含关系的,就 ...

  4. P1803 凌乱的yyy / 线段覆盖(选择不相交区间,贪心)

    题目描述 现在各大oj上有n个比赛,每个比赛的开始.结束的时间点是知道的. yyy认为,参加越多的比赛,noip就能考的越好(假的) 所以,他想知道他最多能参加几个比赛. 由于yyy是蒟蒻,如果要参加 ...

  5. NYOJ 14 会场安排问题 贪心算法 之 选择不相交区间

    会场安排问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就 ...

  6. 贪心法——选择不相交区间

    贪心法--选择不相交区间 选择不相交区间.数轴上有nn个开区间(ai,bi)(a_i, b_i).选择尽量多个区间,使得这些区间两两没有公共点. 贪心思路:按b<script id=" ...

  7. 选择不相交区间(贪心:求不相交区间最多个数)

    选择不相交区间(转) 数轴上有n个区间[ai,bi],要求选择尽量多个区间,使得这些区间两两没有公共点. 贪心策略: 按照b1<=b2<=b3-的方式排序,然后从前向后遍历,每当遇到可以加 ...

  8. ACWing 908.最大不相交区间数量

    解题思路: 本题与ACWing 905.区间选点思路类似,可以把选的每个点覆盖到的区间看成一个整体,所有整体之间互不相交,即最大不相交区间数量. 完整代码如下: #include<bits/st ...

  9. LORA技术---LoRa信号从数据流变为LoRa扩频信号,再从射频信号通过解调变为数据

    本文主要介绍LoRa扩频技术细节,详细的描述了LoRa信号从数据流变为LoRa扩频信号,再从射频信号通过解调变为数据的全过程.内容主要来自<LoRa物联网通信技术>一书,该书是由现任Sem ...

最新文章

  1. VS Tools for AI全攻略(2)低配置虚拟机也能玩转深度学习,无需NC/NV系列
  2. 互联网行业哪个职位比较有前途?
  3. Scala学习(一、环境配置和基础)
  4. java8: hashmap性能提升
  5. android安卓 通知notification
  6. PRD 如何编写好的需求文档
  7. (附源码)app订餐APP 毕业设计 190711
  8. vs2015+opencv+dilb+于仕琪人类识别算法对人脸特征点进行检测
  9. caxa线切割怎样画链轮_CAD画链轮的方法
  10. Android Audio音频系统之深入浅出
  11. CTF-WEB小技俩 ——合天网安实验室学习笔记
  12. python 爬取句子迷,多好的一个网站(哭~~)
  13. NoteFirst的Word插件(WordAddIn)安装过程中遇到的问题和解决方案
  14. SEM竞价推广创意快速撰写的方法,智能创意制作
  15. php投影,投影+直播双模式方案搭建
  16. Java中Math函数的使用
  17. flashback的配置
  18. Python爬取天气数据及可视化分析(附源码)
  19. Android 源码之overlay分析
  20. 飞跃计划 | 袋鼠云与睿呈时代达成战略合作,携手助推传统行业数字化转型

热门文章

  1. POJ 3696 欧拉函数+快速幂
  2. C语言中的深拷贝和浅拷贝
  3. 【C语言】单链表的所有操作的实现(包括PopBack、PushBack、PopFront、PushFront、Insert)
  4. exec函数族(部分 最常用的)
  5. 02-线性结构2 一元多项式的乘法与加法运算 (20 分
  6. java基础的三个框架,进阶学习资料!
  7. WebGL——osg框架学习一
  8. 为什么下了android 4.1 的SDK后在本地用浏览器看api说明文档时,浏览器打开api的html文件很慢?试了好几款浏览器都一样。为什么?...
  9. 粘贴复制Android复制和粘贴的实现
  10. 【ASP.NET Web API教程】3.3 通过WPF应用程序调用Web API(C#)