Golang | Leetcode Golang题解之第352题将数据流变为多个不相交区间

题目:

题解:

type SummaryRanges struct {
    *redblacktree.Tree
}

func Constructor() SummaryRanges {
    return SummaryRanges{redblacktree.NewWithIntComparator()}
}

func (ranges *SummaryRanges) AddNum(val int) {
    // 找到 l0 最大的且满足 l0 <= val 的区间 interval0 = [l0, r0]
    interval0, has0 := ranges.Floor(val)
    if has0 && val <= interval0.Value.(int) {
        // 情况一
        return
    }

    // 找到 l1 最小的且满足 l1 > val 的区间 interval1 = [l1, r1]
    // 在有序集合中,interval1 就是 interval0 的后一个区间
    interval1 := ranges.Iterator()
    if has0 {
        interval1 = ranges.IteratorAt(interval0)
    }
    has1 := interval1.Next()

    leftAside := has0 && interval0.Value.(int)+1 == val
    rightAside := has1 && interval1.Key().(int)-1 == val
    if leftAside && rightAside {
        // 情况四
        interval0.Value = interval1.Value().(int)
        ranges.Remove(interval1.Key())
    } else if leftAside {
        // 情况二
        interval0.Value = val
    } else if rightAside {
        // 情况三
        right := interval1.Value().(int)
        ranges.Remove(interval1.Key())
        ranges.Put(val, right)
    } else {
        // 情况五
        ranges.Put(val, val)
    }
}

func (ranges *SummaryRanges) GetIntervals() [][]int {
    ans := make([][]int, 0, ranges.Size())
    for it := ranges.Iterator(); it.Next(); {
        ans = append(ans, []int{it.Key().(int), it.Value().(int)})
    }
    return ans
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/871529.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Browserless 网页抓取:Playwright 中的 NodeJS

什么是 Playwright&#xff1f; Playwright 是一个用于 Web 测试和自动化的开源框架。基于 Node.js&#xff0c;由 Microsoft 开发&#xff0c;它通过单一 API 支持 Chromium、Firefox 和 WebKit。它可以在 Windows、Linux 和 macOS 上运行&#xff0c;并且兼容 TypeScript、J…

设计模式六大原则(一)--单一职责原则

摘要 单一职责原则是设计模式六大原则之一&#xff0c;强调一个类应该仅有一个引起它变化的原因&#xff0c;即每个类应仅负责一项职责。本文通过详细探讨单一职责原则的定义、实现方式、优缺点及其适用场景&#xff0c;揭示了其在软件设计中的核心地位。通过类的拆分、接口设…

TCP协议段中的六个标志位

目录 ACK SYN RST FIN PSH URG TCP报文格式中的六个标志位由6个比特构成&#xff0c;在通信双方基于TCP协议互相发送报文数据时可以通过报头中标志位来区别对方发送的报文数据的请示。 ACK 确认号是否有效。 接收端对所收到的报文进行检查&#xff0c;若未发现错误&…

周易测算系统开发:融合古典智慧与现代技术的创新实践

一、引言 周易&#xff0c;作为中国古代文化的瑰宝&#xff0c;蕴含着深邃的哲学思想与预测智慧&#xff0c;其独特的六十四卦体系及爻变原理&#xff0c;自古以来便被人们用于探索自然规律、人生哲理及未来趋势。随着科技的飞速发展&#xff0c;将周易智慧与现代计算机技术相结…

StackStorm自动化平台

1. StackStorm概述 1.1 StackStorm介绍 StackStorm是一个开源的事件驱动自动化平台&#xff0c;它允许开发者和系统管理员自动化IT和网络操作。StackStorm结合了IT运维、DevOps和网络安全团队的需求&#xff0c;提供了一个集中式的工作流自动化解决方案&#xff0c;包括事件响…

图像数据处理13

三、空域滤波 3.1滤波器的基本概念 什么是滤波&#xff1f; 简单来说就是从干扰信号中提取出有用的信号 3.1.1空域滤波&#xff08;Spatial Domain Filtering&#xff09; 空域滤波适用于简单的滤波任务&#xff0c;直接对图像的像素空间进行操作。它通过对图像中的每个像…

ES 支持乐观锁吗?如何实现的?

本篇主要介绍一下Elasticsearch的并发控制和乐观锁的实现原理&#xff0c;列举常见的电商场景&#xff0c;关系型数据库的并发控制、ES的并发控制实践。 并发场景 不论是关系型数据库的应用&#xff0c;还是使用Elasticsearch做搜索加速的场景&#xff0c;只要有数据更新&…

ES6-ES13学习笔记

目录 初识ES6 变量声明 解构赋值 对象解构 ​编辑 数组解构 ​编辑模版字符串 字符串扩展 includes() repeat() startsWith() endsWith() 数值扩展 二进制和八进制表示法 &#xff08;Number.&#xff09;isFinite()与isNaN() Number.isInteger() Math.trunc …

AWS不同类型的EC2实例分别适合哪些场景?

Amazon Web Services&#xff08;AWS&#xff09;的弹性计算云&#xff08;EC2&#xff09;提供了多种实例类型&#xff0c;以满足不同的应用需求和工作负载。了解不同类型的 EC2 实例及其适用场景&#xff0c;可以帮助用户更好地优化性能和控制成本。九河云和大家一起了解一下…

元数据管理gravitino学习

元数据管理的组成有几个部分&#xff1a;Metaservice(Gravitino)、Luoshu&#xff08;amoro)、Hive Metastore&#xff0c;其中gravitino是数据管理模块实现元数据统一管理的核心。前面有提到hive metastore可以存储hive的库表元数据信息&#xff0c;可以用于存储关于hive表、列…

一文读懂推荐系统

随着互联网的飞速发展&#xff0c;信息过载已经成为了一个普遍的问题。我们每天都要面对大量的内容&#xff0c;却很难找到真正符合自己兴趣和需求的信息。这时&#xff0c;推荐系统应运而生&#xff0c;它能够根据用户的兴趣和行为&#xff0c;智能地推荐相关内容&#xff0c;…

思特科技:国家宝藏数字体验馆展现东方美学 让“文物活起来”

01      思特科技为“国家宝藏数字体验展”提供“数字技术”支持&#xff0c;带来国宝的数字化演绎。以《国家宝藏》顶级IP为基础&#xff0c;打造的全新沉浸文化项目“国宝数字体验展“&#xff0c;借由文物的视角、站在历史的星河中&#xff0c;探寻时间长河中不变的智慧…

Mac文件需要分卷压缩怎么办 Mac上怎么解压分卷压缩的文件

在处理大型文件的传输和存储的时候&#xff0c;Mac用户常面临文件大小超过限制的问题。为了有效管理这些大文件&#xff0c;分卷压缩成为一种必不可少的解决方案。Mac文件需要分卷压缩怎么办&#xff1f;Mac上怎么解压分卷压缩的文件&#xff1f;本文将向你介绍如何使用BetterZ…

近视防控明星:蔡司小乐圆中期临床数据详解

近视防控明星&#xff1a;蔡司小乐圆中期临床数据详解 小乐圆镜片作为近视防控镜片里的明星产品&#xff0c;从22年5月上市以来防控效果就一直备受大家的关注。而最近中期临床试验的结果&#xff0c;给家长孩子吃了一颗定心丸。 本次实验中&#xff0c;240位受试者被随机分成三…

C语言函数详解(上)【库函数】

目录 前言 一、函数的概念 二、库函数 1.标准库和头文件 2.库函数使用方式 3.如何通过以上的网站查看库函数信息 &#xff08;以sqrt为例&#xff09; 3.1 功能 3.2 头文件包含 3.3 库函数文档的⼀般格式 1. 函数原型 ​编辑2. 函数功能介绍 ​编辑3. 参数和返…

基于vue3的模拟数据mock.js应用

一、mock.js介绍 Mock.js 是一个用于生成随机数据&#xff0c;拦截 Ajax 请求的 JavaScript 库。它主要用于前后端分离开发时&#xff0c;模拟后端数据接口&#xff0c;使得前端开发者在不需要后端实际编写接口的情况下&#xff0c;也能进行开发、测试。 1、主要功能 生成随…

别只知道Xmind了,这4款思维导图工具也都很实用!

作为一款十分知名的思维导图工具&#xff0c;Xmind确实是一款很好用的脑图工具。不仅操作流畅&#xff0c;功能丰富&#xff0c;还有很多素材可以使用。但是没有云同步功能&#xff0c;免费的功能也有限。如果大家想知道更多好用的思维导图工具的话&#xff0c;也可以看看这4个…

企业级web应用服务器tomcat

目录 一、Web技术 1.1 HTTP协议和B/S 结构 1.2 前端三大核心技术 1.2.1 HTML 1.2.2 CSS&#xff08;Cascading Style Sheets&#xff09;层叠样式表 1.2.3 JavaScript 二、tomcat的功能介绍 2.1 安装 tomcat 环境准备 2.1.1 安装java环境 2.1.2 安装并启动tomcat …

「数组」希尔排序 / 区间增量优化(C++)

目录 概述 思路 核心概念&#xff1a;增量d 算法过程 流程 Code 优化方案 区间增量优化 Code(pro) 复杂度 概述 我们在「数组」冒泡排序|选择排序|插入排序 / 及优化方案&#xff08;C&#xff09;中讲解了插入排序。 它有这么两个特点&#xff1a; ①待排序元素较…

路由偏好详解

路由偏好对网络性能和数据传输效率有着重要影响。本文将从路由偏好的相关概念、影响因素和实际应用&#xff0c;同时结合IP数据云的功能展示其在优化路由选择中的作用。 路由偏好指网络设备在选择路由路径时所倾向的特定策略或条件。它基于多种因素进行决策&#xff0c;例如网络…