352. 将数据流变为多个不相交区间
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. 将数据流变为多个不相交区间相关推荐
- LeetCode 352. 将数据流变为多个不相交区间(map二分查找)
文章目录 1. 题目 2. 解题 1. 题目 给定一个非负整数的数据流输入 a1,a2,-,an,-,将到目前为止看到的数字总结为不相交的区间列表. 例如,假设数据流中的整数为 1,3,7,2,6,- ...
- 【数据结构与算法】之深入解析“将数据流变为多个不相交区间”的求解思路与算法示例
一.题目要求 给你一个由非负整数 a1, a2, -, an 组成的数据流输入,请你将到目前为止看到的数字总结为不相交的区间列表. 实现 SummaryRanges 类: SummaryRanges( ...
- 树上问题 ---- Codeforces Round #722 (Div. 1) C. Trees of Tranquillity [dfs序区间的性质+最大不相交区间的性质]
题目链接 题目大意: 解题思路: 1.首先我们知道最大团里面的点全都是S树的一条路径上的点,但是也要满足在K树上不存在祖先关系. 2.对于祖先关系,我们发现对于一棵树上的dfs序,他们是包含关系的,就 ...
- P1803 凌乱的yyy / 线段覆盖(选择不相交区间,贪心)
题目描述 现在各大oj上有n个比赛,每个比赛的开始.结束的时间点是知道的. yyy认为,参加越多的比赛,noip就能考的越好(假的) 所以,他想知道他最多能参加几个比赛. 由于yyy是蒟蒻,如果要参加 ...
- NYOJ 14 会场安排问题 贪心算法 之 选择不相交区间
会场安排问题 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办.小刘的工作就 ...
- 贪心法——选择不相交区间
贪心法--选择不相交区间 选择不相交区间.数轴上有nn个开区间(ai,bi)(a_i, b_i).选择尽量多个区间,使得这些区间两两没有公共点. 贪心思路:按b<script id=" ...
- 选择不相交区间(贪心:求不相交区间最多个数)
选择不相交区间(转) 数轴上有n个区间[ai,bi],要求选择尽量多个区间,使得这些区间两两没有公共点. 贪心策略: 按照b1<=b2<=b3-的方式排序,然后从前向后遍历,每当遇到可以加 ...
- ACWing 908.最大不相交区间数量
解题思路: 本题与ACWing 905.区间选点思路类似,可以把选的每个点覆盖到的区间看成一个整体,所有整体之间互不相交,即最大不相交区间数量. 完整代码如下: #include<bits/st ...
- LORA技术---LoRa信号从数据流变为LoRa扩频信号,再从射频信号通过解调变为数据
本文主要介绍LoRa扩频技术细节,详细的描述了LoRa信号从数据流变为LoRa扩频信号,再从射频信号通过解调变为数据的全过程.内容主要来自<LoRa物联网通信技术>一书,该书是由现任Sem ...
最新文章
- VS Tools for AI全攻略(2)低配置虚拟机也能玩转深度学习,无需NC/NV系列
- 互联网行业哪个职位比较有前途?
- Scala学习(一、环境配置和基础)
- java8: hashmap性能提升
- android安卓 通知notification
- PRD 如何编写好的需求文档
- (附源码)app订餐APP 毕业设计 190711
- vs2015+opencv+dilb+于仕琪人类识别算法对人脸特征点进行检测
- caxa线切割怎样画链轮_CAD画链轮的方法
- Android Audio音频系统之深入浅出
- CTF-WEB小技俩 ——合天网安实验室学习笔记
- python 爬取句子迷,多好的一个网站(哭~~)
- NoteFirst的Word插件(WordAddIn)安装过程中遇到的问题和解决方案
- SEM竞价推广创意快速撰写的方法,智能创意制作
- php投影,投影+直播双模式方案搭建
- Java中Math函数的使用
- flashback的配置
- Python爬取天气数据及可视化分析(附源码)
- Android 源码之overlay分析
- 飞跃计划 | 袋鼠云与睿呈时代达成战略合作,携手助推传统行业数字化转型
热门文章
- POJ 3696 欧拉函数+快速幂
- C语言中的深拷贝和浅拷贝
- 【C语言】单链表的所有操作的实现(包括PopBack、PushBack、PopFront、PushFront、Insert)
- exec函数族(部分 最常用的)
- 02-线性结构2 一元多项式的乘法与加法运算 (20 分
- java基础的三个框架,进阶学习资料!
- WebGL——osg框架学习一
- 为什么下了android 4.1 的SDK后在本地用浏览器看api说明文档时,浏览器打开api的html文件很慢?试了好几款浏览器都一样。为什么?...
- 粘贴复制Android复制和粘贴的实现
- 【ASP.NET Web API教程】3.3 通过WPF应用程序调用Web API(C#)