力扣经典150题第四十七题:汇总区间

目录

      • 题目描述和要求
      • 示例解释
      • 解题思路
      • 算法实现
      • 复杂度分析
      • 测试和验证
      • 总结和拓展
      • 参考资料

题目描述和要求

给定一个无重复元素的有序整数数组 nums,要求返回恰好覆盖数组中所有数字的最小有序区间范围列表。即,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字。

列表中的每个区间范围 [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”

示例 2:

输入:nums = [0,2,3,4,6,8,9]
输出:[“0”,“2->4”,“6”,“8->9”]
解释:区间范围是:

  • [0,0] --> “0”
  • [2,4] --> “2->4”
  • [6,6] --> “6”
  • [8,9] --> “8->9”

解题思路

一种简单的方法是遍历数组,对连续的数字进行合并形成区间。具体步骤如下:

  1. 初始化一个结果列表,用于存储最终的区间范围。
  2. 使用双指针,分别标记区间的起始和结束位置。
  3. 遍历数组,如果当前数字与前一个数字连续,则更新结束位置;否则,将前一个区间加入结果列表,并更新起始和结束位置。
  4. 将最后一个区间加入结果列表。
  5. 返回结果列表。

算法实现

import java.util.ArrayList;
import java.util.List;public class SummaryRanges {public List<String> summaryRanges(int[] nums) {List<String> result = new ArrayList<>();if (nums == null || nums.length == 0) {return result;}int start = nums[0];int end = nums[0];for (int i = 1; i < nums.length; i++) {if (nums[i] == end + 1) {end = nums[i];} else {if (start == end) {result.add(Integer.toString(start));} else {result.add(start + "->" + end);}start = nums[i];end = nums[i];}}if (start == end) {result.add(Integer.toString(start));} else {result.add(start + "->" + end);}return result;}
}

复杂度分析

  • 时间复杂度:O(n),其中 n 为数组的长度。遍历一次数组。
  • 空间复杂度:O(1)。除了结果列表外,不需要额外的空间。

测试和验证

编写测试用例对算法进行验证,确保其正确性和健壮性。

public class Main {public static void main(String[] args) {SummaryRanges summaryRanges = new SummaryRanges();int[] nums1 = {0, 1, 2, 4, 5, 7};System.out.println(summaryRanges.summaryRanges(nums1)); // ["0->2", "4->5", "7"]int[] nums2 = {0, 2, 3, 4, 6, 8, 9};System.out.println(summaryRanges.summaryRanges(nums2)); // ["0", "2->4", "6", "8->9"]}
}

总结和拓展

本题通过简单的数组遍历和区间合并的方式,实现了求解给定有序整数数组的最小区间范围列表。这个算法简单高效,在处理类似问题时是一个不错的选择。

此外,我们也可以考虑优化算法以提高效率,例如使用更高效的数据结构或算法来实现同样的功能。

参考资料

  • 《力扣经典150题》
  • LeetCode 官方网站

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三、VLAN间路由(三层交换)

VLAN间路由可以通过二层交换机配合路由器来实现&#xff0c;也可以通过三层交换机来实现。 目录 1.单臂路由 2.通过三层交换机实现不同vlan的互访 1.单臂路由 注&#xff1a; 1.三层接口不能正确识别带vlan tag的数据帧 2.所有子接口与主接口共享MAC地址 命令 int g0/0/0.1…

Tom与Locust的渐入佳境

本书 第一章&#xff1a;Tom的Locust压力测试之旅 第二章&#xff1a;意外的挑战&#xff1a;系统性能问题的出现 第三章&#xff1a;高手相助&#xff1a;遇见性能测试专家 第四章&#xff1a;Locust初探&#xff1a;探寻压力测试工具 第五章&#xff1a;脚本编写&#xff1a…

Java Spring 中 Bean 的作用域(Scope)

在 Java Spring 框架中&#xff0c;Bean 的作用域&#xff08;Scope&#xff09;定义了 Bean 的生命周期以及其在 Spring 容器中的可见性。Spring 提供了几种不同的 Bean 作用域&#xff0c;以满足不同的应用需求。以下是 Spring 中主要的 Bean 作用域及其详细解释&#xff1a;…

试用了三个Ai音乐工具,我的偶像河图要完蛋了

试了三个生成音乐的ai工具&#xff0c;分别是爆火的suno,后期新秀udio&#xff0c;还有我们国内的天工。 先说感受&#xff0c;suno和天工我觉得稍微靠前&#xff0c;udio可能我的配置风格有问题&#xff0c;啪啪啪连选了好几个风格&#xff0c;生成的东西有点怪。 我随手写了…

语音识别的基本概念

语音识别的基本概念​​​​​​​ ​​​​​​​ 言语是一种复杂的现象。人们很少了解它是如何产生和感知的。天真的想法常常是语音是由单词构成的&#xff0c;而每个单词又由音素组成。不幸的是&#xff0c;现实却大不相同。语音是一个动态过程&#xff0c;没有明确区分的…

linux学习:线程安全(信号量+互斥锁读写锁+条件变量+可重入函数)

目录 信号量 有名信号量 步骤 api 创建、打开一个POSIX有名信号量 对 POSIX 有名信号量进行 P、V 操作 关闭、删除 POSIX 有名信号量 例子 无名信号量 步骤 api 初始化、销毁 POSIX 无名信号量 互斥锁读写锁 例子 两条线程 使用互斥锁来互斥地访问标准输出 在加锁…

算法人生(12):从“优先级队列算法”到“”六点优先工作法”

算法思想和生活中很多解决问题的思想有着异曲同工之妙&#xff0c;让我们来看下今天的“优先级队列算法”可以怎么应用到我们的生活中吧&#xff01; 优先级队列算法&#xff08;Priority Queue Algorithm&#xff09; 是一种特殊的数据结构&#xff0c;它在常规队列秉持着“先…

MySQL中START REPLICA 语句详解

在数据库管理和操作中&#xff0c;复制是保证数据可用性和分布式处理的关键技术之一。MySQL从8.0.22版本开始引入了START REPLICA语句&#xff0c;替代了原来的START SLAVE语句。本篇博文将详细介绍START REPLICA语句的用法和功能&#xff0c;帮助数据库管理员更有效地管理MySQ…

软件工程师,如何有效缓解工作压力

概述 在这个快速迭代、技术日新月异的数字时代&#xff0c;软件工程师们常常站在技术创新的最前沿。他们肩负着构建高效、可靠软件系统的重任&#xff0c;同时也面临着紧迫的截止日期、复杂的技术难题和持续的学习需求&#xff0c;这些因素共同构成了巨大的工作压力。如何在高压…

[SQL系列]从零开始学Clickhouse——集群篇

在上一篇中&#xff0c;我们通过Docker构建了一个简单的单点Clickhouse&#xff0c;但是如果要做大数据的处理的话&#xff0c;Clickhouse集群是必不可少的&#xff0c;今天我们先用Docker简单地搭建一个Clickhouse集群。 容器逐个部署 使用Docker部署ClickHouse集群涉及几个步…

1.认识USB协议

目录 前言 在嵌入式场景的具体体现 USB通信协议 总结 前言 在这之前&#xff0c;我们需要认识USB是什么东西&#xff0c;它是一种通信协议&#xff0c;协议只是规定数据的&#xff0c;在物理层面上&#xff0c;它可以有多种表现形式。在我们日常生活中也非常常见&#xff0…

FebHost:什么是挪威.no域名,如何注册?

挪威国家域名介绍 挪威是一个位于北欧的国家&#xff0c;北面和西面是大西洋和北海&#xff0c;东面和南面则与瑞典、芬兰接壤。挪威是一个高度发达的经济体&#xff0c;其政府在经济管理和可持续发展方面也取得了很多成就。挪威的人均GDP在世界范围内排名非常靠前&#xff0c…

【Unity】 使用代码分析(Roslyn Analyzers)实现自动代码审查(Code Review)

索引 Roslyn AnalyzersCode Review自动 Code Review 案例1.public、internal权限的字段建议以大写字母开头。2.private、protected权限的字段建议以下划线小写字母开头。3.不建议直接继承 MonoBehaviour&#xff0c;建议继承至 HTBehaviour。4.不建议使用 Input 判断输入或获取…

命令执行。

命令执行 在该项目的readme中&#xff0c;描述了怎么去调用的flink 通过java原生的runtime来调用flink&#xff0c;下一步就是去看看具体的调用过程了&#xff0c;是否存在可控的参数 找到具体提交命令的类方法CommandRpcClinetAdapterImpl#submitJob() 这里要确定command&am…

C++-6

使用模板类&#xff0c;实现顺序栈。 #include <iostream>using namespace std; template <typename T> class Seqlite {T data[30];int len0; public:void head_inst(T date);void head_dele();void show(); }; template <typename T> …

Phi-3-mini-4k-instruct 的功能测试

Model card 介绍 Phi-3-Mini-4K-Instruct 是一个 3.8B 参数、轻量级、最先进的开放模型&#xff0c;使用 Phi-3 数据集进行训练&#xff0c;其中包括合成数据和经过过滤的公开可用网站数据&#xff0c;重点是 高品质和推理密集的属性。 该型号属于 Phi-3 系列&#xff0c;Mini…

Django框架之ORM操作

一、选择数据库 1、默认数据库 Django默认的数据库是sqlite3数据库 DATABASES {default: {ENGINE: django.db.backends.sqlite3,NAME: BASE_DIR / db.sqlite3,} }2、指定数据库 修改连接到MySQL数据库 DATABASES {default: {ENGINE: django.db.backends.mysql,# 数据库名…

一、安装Redis并运行

Windows安装Redis 1.打开网址下载 下载地址&#xff1a;https://github.com/tporadowski/redis/releases。 Redis 支持 32 位和 64 位。这个需要根据你系统平台的实际情况选择 我选择的是 然后一步步安装 可以参考&#xff1a;https://blog.csdn.net/zbx931197485/article/d…

李廉洋:4.29黄金原油最新走势分析,做单必看策略,

传统定价框架下&#xff0c;黄金兼具货币、商品和金融三重属性&#xff0c;对应货币、抗通胀和避险价值&#xff0c;因此通常与美元、美债利率反向变动。但近期这一定价规律“失灵”了&#xff0c;黄金、利率和美元同涨。三者同涨后&#xff0c;一个月后续转为下跌的频率超过一…

【JS】节流与防抖技术

JavaScript: 节流与防抖技术 当用户进行滚动、调整窗口大小或进行频繁的键盘输入时&#xff0c;页面上的某些事件处理器可能会被频繁触发。如果每次事件触发都执行函数&#xff0c;可能会对性能产生显著影响。在这种情况下&#xff0c;我们可以利用节流&#xff08;Throttle&a…