题目链接: https://leetcode.com/problems/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?

解析:

题目的意思是新加进来的数字如果遇到连续区间就合并

方法一用vector

/*** 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:void addNum(int val) {auto Cmp = [](Interval a, Interval b) { return a.start < b.start; };  auto it = lower_bound(vec.begin(), vec.end(), Interval(val, val), Cmp);int start = val, end = val;if(it != vec.begin() && (it-1)->end+1 >= val) it--;while(it != vec.end() && val+1 >= it->start && val-1 <= it->end){start = min(start, it->start);end = max(end, it->end);it = vec.erase(it);}vec.insert(it,Interval(start, end));}vector<Interval> getIntervals() {return vec;}
private:vector<Interval> vec;
};/*** Your SummaryRanges object will be instantiated and called as such:* SummaryRanges obj = new SummaryRanges();* obj.addNum(val);* vector<Interval> param_2 = obj.getIntervals();*/

注意:

auto Cmp = [](Interval a, Interval b) { return a.start < b.start; };

这里实际上用的是一个lambda表达式

auto it = lower_bound(vec.begin(), vec.end(), Interval(val, val), Cmp);

这样代码用了C11中的auto,根据初始化的值的类型来推断变量类型的功能,这里it的类型实际上是vector<Interval>::iterator

方法二用set

/*** 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:void addNum(int val) {auto Cmp = [](Interval a, Interval b) { return a.start < b.start; };auto it = lower_bound(vec.begin(), vec.end(), Interval(val, val), Cmp);int start = val, end = val;if(it != vec.begin() && (it-1)->end+1 >= val) it--;while(it != vec.end() && val+1 >= it->start && val-1 <= it->end){start = min(start, it->start);end = max(end, it->end);it = vec.erase(it);}vec.insert(it,Interval(start, end));}vector<Interval> getIntervals() {return vec;}
private:vector<Interval> vec;
};/*** Your SummaryRanges object will be instantiated and called as such:* SummaryRanges obj = new SummaryRanges();* obj.addNum(val);* vector<Interval> param_2 = obj.getIntervals();*/

转载于:https://www.cnblogs.com/raichen/p/5605472.html

352. Data Stream as Disjoint Intervals相关推荐

  1. 隐藏数据的好方法----Alternative Data Stream(可选数据流)

    前言 "Alternative Data Stream"用中文来说就是"可选数据流" 它可以干啥呢? 它可以隐藏数据. 演示 创建一个aa.txt和一个bb.t ...

  2. git clone时出现 error:inflate:data stream error(incorrect data check)

    git clone时出现 error:inflate:data stream error(incorrect data check) fatal:serrious inflate inconsiste ...

  3. 数据结构问题集锦 - Find Median from Data Stream

    临近期末,鸭梨山大啊,就不多说了.这道题的要求就是,给定一串输入,在中间任何一个时候,都能够求出添加到一半的序列的中位数. 大概考虑一下,如果用动态数组来进行元素插入的话,尽管这样查询中位数的复杂度为 ...

  4. LeetCode 295. Find Median from Data Stream

    原题链接在这里:https://leetcode.com/problems/find-median-from-data-stream/ 题目: Median is the middle value i ...

  5. Elastic:集群相关知识点总结(一)数据流 Data Stream、索引生命周期 ILM、可搜索快照 searchable snapshots、跨集群搜索 CCS、跨集群复制 CCR

    0.引言 集群管理是ES的核心重点,因此相关的知识点至关重要,本期主要针对数据流.索引生命周期.可搜索快照.跨集群搜索.跨集群复制进行讲解 1.数据流 Data Stream 官方文档:Data st ...

  6. Elasticsearch 7.X data stream 深入详解

    直接从一个新概念的认知过程说下 elasticsearch data stream. 记得第一次听到 data stream 的时候,还是去年下半年在公交大巴车上早 8 点听魏彬老师的直播,后来就一直 ...

  7. 阿雪的学习记录|【V-Rep】Graph找不到Add new data stream to record问题解决及简单实现revolute_joint转动

    来先解决在Graph里找不到Add new data stream to record的问题,哇,全网都没人说这个事儿,你们都直接用的4.1.0版本吗!是的,4.2.0版本就是会没有这一项,我也找不着 ...

  8. 一周一论文(翻译)——[IEEE 14] Elastic scaling for data stream processing

    Abstract 本文讨论与通用分布式数据流处理应用程序的自动并行化相关的盈利问题.自动并行化涉及在应用程序的数据流图中定位区域,这些区域可以在运行时复制以应用数据分区,以实现扩展.为了使自动并行化在 ...

  9. python实现滑动窗口平均_数据流滑动窗口平均值 · sliding window average from data stream...

    [抄题]: 给出一串整数流和窗口大小,计算滑动窗口中所有整数的平均值. MovingAverage m = new MovingAverage(3); m.next(1) = 1 // 返回 1.00 ...

最新文章

  1. ​两大顶级AI算法一起开源!Nature、Science齐发Alphafold2相关重磅,双厨狂喜~
  2. DEV—【GridControl添加按钮列】
  3. 天津大学计算机考研真题,天津大学计算机科学与技术考研真题
  4. 【转载】C ++ 基础 指针 引用
  5. SyntaxError: Missing parentheses in call to 'print'
  6. FFmpeg 2.1 试用(新版支持HEVC,VP9)
  7. eclipse aop连接点joinpoint方法点不出来_(面试必备)你必须要懂的Spring-Aop
  8. 跨过虚拟化技术浪潮,这家企业快步入局云数据管理​
  9. linux qt 屏幕亮度,调整14.04.1 屏幕亮度
  10. 关于电子信息/计算机类专业从业者相关的证书与职称
  11. [资源]--IOS捷径大全,众多实用小功能
  12. 自己DIY word2010脚注和尾注没有的格式
  13. 无法找到c语言dll入口点,c# – 无法在DLL中找到入口点
  14. PC微信3.3.0内测版(新增朋友圈功能)
  15. 5个常用的上传图片进行搜索的网站
  16. chrome查看请求加载时间
  17. 题目中的英语短语积累
  18. linux下使用sdkmanage安装sdk
  19. “珠三角”企业创新难在哪里
  20. setContentView剖析

热门文章

  1. ubantu18.04使用docker部署mysql5.7及在宿主机登录容器内mysql
  2. Scala集合:ListBuffer的头head和尾tail
  3. mysql操作查询结果case when then else end用法举例
  4. IDEA创建springboot项目:Unable to import maven project: See logs for details
  5. simulink中不能改名_《和平精英》没有卡如何解决 改名字方法
  6. 【小米校招笔试】一个数组是由有序数组经过n次循环移动后所得,请你用最快速度查找某个元素位置
  7. Windows 10 下 Anaconda3 (Python 3.8) 配置 OpenCV-4.4.0
  8. java中的解码和编码_关于java中编码和解码(一)
  9. Coloring Dominoes
  10. Makefile中的MAKECMDGOALS