当前位置: 首页 > news >正文

【数组】Leetcode 228. 汇总区间【简单】

汇总区间

  • 给定一个 无重复元素 的 有序 整数数组 nums 。

  • 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。

  • 列表中的每个区间范围 [a,b] 应该按如下格式输出:

  •   "a->b" ,如果 a != b
    
  •   "a" ,如果 a == b
    

示例 1:

输入:nums = [0,1,2,4,5,7]
输出:[“0->2”,“4->5”,“7”]
解释:区间范围是:
[0,2] --> “0->2”
[4,5] --> “4->5”
[7,7] --> “7”

解题思路

  • 遍历数组时,识别连续的数字段,将其作为一个区间,并将区间转换为所需的字符串格式。

Java实现

public class SummaryRanges {public List<String> summaryRanges(int[] nums) {List<String> ranges = new ArrayList<>();int n = nums.length;if (n == 0) {return ranges;}int start = nums[0];int end = nums[0];for (int i = 1; i < n; i++) {if (nums[i] == end + 1) {end = nums[i];} else {//判断是否是单个数字不连续if (start == end) {ranges.add(String.valueOf(start));} else {//否则,是多个数字 后续不再连续ranges.add(start + "->" + end);}start = nums[i];end = nums[i];}}//最后范围只做了赋值操作,并没有做添加操作,添加最后范围if (start == end) {ranges.add(String.valueOf(start));} else {ranges.add(start + "->" + end);}return ranges;}public static void main(String[] args) {SummaryRanges sr = new SummaryRanges();int[] nums1 = {0, 1, 2, 4, 5, 7};int[] nums2 = {0, 2, 3, 4, 6, 8, 9};System.out.println(sr.summaryRanges(nums1)); // 输出: ["0->2", "4->5", "7"]System.out.println(sr.summaryRanges(nums2)); // 输出: ["0", "2->4", "6", "8->9"]}
}

时间空间复杂度

  • 时间复杂度: O(n),其中 n 是数组 nums 的长度。只需要遍历一次数组,因此时间复杂度是线性的。
  • 空间复杂度: O(1)到O(n),除了用于存储结果的列表 ranges 最差为O(n/2),即(1、3、5、7、、、)最好为O(1),即(1、2、3、4、、、)

相关文章:

  • 【C语言】实现贪吃蛇--项目实践(超详细)
  • 安卓开发:相机水印设置
  • 【JAVA WEB实用与优化技巧】如何自己封装一个自定义UI的Swagger组件,包含Swagger如何处理JWT无状态鉴权自动TOKEN获取
  • 经典面试题:进程、线程、协程开销问题,为什么进程切换的开销比线程的大?
  • 上位机图像处理和嵌入式模块部署(f103 mcu运行freertos)
  • JVM之【运行时数据区】
  • JDK17新特性整理
  • 扫雷的技巧
  • React封装Canvas组件
  • Excel表格在线解密:轻松解密密码,快速恢复数据
  • 某大型制造集团企业信息化建设总体规划设计方案(67页PPT)
  • Java计算日期相差天数的几种方法
  • 【代码随想录37期】Day18 找树左下角的值、路径总和、从中序与后序遍历序列构造二叉树
  • 文盘Rust -- 生命周期问题引发的 static hashmap 锁
  • flink读kafka写mysql数据库
  • 03Go 类型总结
  • css属性的继承、初识值、计算值、当前值、应用值
  • HTTP 简介
  • js数组之filter
  • js写一个简单的选项卡
  • k个最大的数及变种小结
  • Python学习笔记 字符串拼接
  • React16时代,该用什么姿势写 React ?
  • Swift 中的尾递归和蹦床
  • Vue 动态创建 component
  • Vue 重置组件到初始状态
  • Vue学习第二天
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • - 概述 - 《设计模式(极简c++版)》
  • 力扣(LeetCode)22
  • 利用jquery编写加法运算验证码
  • 数组大概知多少
  • ​io --- 处理流的核心工具​
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #快捷键# 大学四年我常用的软件快捷键大全,教你成为电脑高手!!
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $.ajax中的eval及dataType
  • (11)MATLAB PCA+SVM 人脸识别
  • (33)STM32——485实验笔记
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (Note)C++中的继承方式
  • (ZT)薛涌:谈贫说富
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (二)Linux——Linux常用指令
  • (二)换源+apt-get基础配置+搜狗拼音
  • (附源码)ssm旅游企业财务管理系统 毕业设计 102100
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (生成器)yield与(迭代器)generator
  • (十三)MipMap
  • (转)Linq学习笔记
  • (转)Linux下编译安装log4cxx
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .net FrameWork简介,数组,枚举