leetcode 面试经典 150 题:汇总区间

链接汇总区间
题序号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”

示例 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”

提示
0 <= nums.length <= 20
-231 <= nums[i] <= 231 - 1
nums 中的所有值都 互不相同
nums 按升序排列

题解

  1. 核心思想
    • 遍历:遍历排序后的数组,记录每个连续区间的起始和结束位置。
    • 处理区间:在遍历过程中,如果当前元素与前一个元素不连续(即当前元素 - 前一个元素 > 1),则表示一个区间的结束,记录该区间并开始新的区间。
    • 生成结果:将记录的区间转换为字符串格式,添加到结果列表中
  2. 复杂度:时间复杂度 O(n),其中 n 为数组的长度;空间复杂度 O(1),除了用于输出的空间外,额外使用的空间为常数。
  3. to_string 函数:该函数用于将各种数据类型转换为字符串。它定义在 头文件中,可以处理多种数据类型,包括整数、浮点数等。
  4. c++ 实现算法
vector<string> summaryRanges(vector<int>& nums) {vector<string> result; //初始化结果容器int n = nums.size();if (n == 0) return result; //数据为空,直接返回空结果int start = 0; // 起始位置// 遍历该数组for (int i = 1; i <= n; ++i) {// 检查是否到了数组末尾或非连续元素//nums[i] != nums[i - 1] + 1:当前元素与前一个元素不连续,进入 if 条件判断中。if (i == n || nums[i] != nums[i - 1] + 1) {if (start == i - 1) {// 单个元素//将单个元素转换成字符串形式放到容器中//to_string 函数是 C++ 标准库中的一个函数,用于将数值(整数或浮点数)转换为对应的// 字符串格式。它是 C++11 引入的一部分,定义在 <string> 头文件中。result.push_back(to_string(nums[start]));} else {// 区间范围//将当前区间 [nums[start], nums[i-1]] 转化为 "start->end" 的字符串形式添加到结果。result.push_back(to_string(nums[start]) + "->" + to_string(nums[i - 1]));}start = i; // 更新新的起点,表示一个新的区间开始位置}}return result;
}
  1. 算法推演
    输入:{0, 1, 2, 4, 5, 7}
inums[i]start判断条件操作result
110连续 (1 == 0 + 1)不进入 if[ ]
220连续 (2 == 1 + 1)不进入 if[ ]
340不连续 (4 != 2 + 1)进入 if[“0->2”]
453连续 (4 == 4 + 1)不进入 if[“0->2”]
573不连续 (7 != 5 + 1)进入 if[“0->2”, “4->5”]
6超出范围5数组末尾(i==n)进入if(start==6-1),单个元素[“0->2”, “4->5”, “7”]
  1. c++ 完整 demo
#include <vector>
#include <string>
#include <iostream>
using namespace std;vector<string> summaryRanges(vector<int>& nums) {vector<string> result; //初始化结果容器int n = nums.size();if (n == 0) return result; //数据为空,直接返回空结果int start = 0; // 起始位置// 遍历该数组for (int i = 1; i <= n; ++i) {// 检查是否到了数组末尾或非连续元素//nums[i] != nums[i - 1] + 1:当前元素与前一个元素不连续,进入 if 条件判断中。if (i == n || nums[i] != nums[i - 1] + 1) {if (start == i - 1) {// 单个元素//将单个元素转换成字符串形式放到容器中//to_string 函数是 C++ 标准库中的一个函数,用于将数值(整数或浮点数)转换为对应的// 字符串格式。它是 C++11 引入的一部分,定义在 <string> 头文件中。result.push_back(to_string(nums[start]));} else {// 区间范围//将当前区间 [nums[start], nums[i-1]] 转化为 "start->end" 的字符串形式添加到结果。result.push_back(to_string(nums[start]) + "->" + to_string(nums[i - 1]));}start = i; // 更新新的起点,表示一个新的区间开始位置}}return result;
}// 测试代码
int main() {vector<int> nums = {0, 1, 2, 4, 5, 7};vector<string> result = summaryRanges(nums);for (const string& range : result) {cout << range << " ";}return 0;
}

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

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

相关文章

使用Go语言中的Buffer实现高性能处理字节和字符串

文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons&#xff1a;JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram&#xff0c;自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 &#xff1f; 5 IDEA必装的插件&…

常见好用的PHP CMS开源系统有哪些?

开源的系统&#xff0c;网站大家估计也见过很多&#xff0c;尤其是用PHP写的开源系统也很受用户们欢迎&#xff0c;这类系统通常以简单、使用、开源为优势&#xff0c;为用户提供更好的服务。以下就为大家介绍几个常见且好用的PHP CMS开源系统。欢迎补充&#xff01; 1、WordP…

Mybatis Plus 分页实现

目录 前言&#xff1a; 一、分页插件 1、添加配置类 &#xff08;1&#xff09;创建配置类方式: &#xff08;2&#xff09;启动类中配置分页插件方式(推荐): 2、测试 二、XML自定义分页 1、UserMapper中定义接口方法 2、UserMapper.xml中编写SQL ​编辑 3、测试 前…

玩转大语言模型——使用graphRAG+Ollama构建知识图谱

系列文章目录 玩转大语言模型——ollama导入huggingface下载的模型 玩转大语言模型——langchain调用ollama视觉多模态语言模型 文章目录 系列文章目录前言下载和安装用下载项目的方式下载并安装用pip方式下载并安装 生成知识图谱初始化文件夹修改模型配置修改知识库生成配置创…

[AUTOSAR通信篇] - AutoSAR通信架构

点击订阅专栏不迷路 文章目录 一、通信驱动二、通信硬件抽象三、通信服务3.1 CAN通信协议栈3.2 J1939通信协议栈3.3 LIN通信协议栈3.4 FlexRay通信协议栈3.5 ETH通信协议栈 返回总目录 先看一张图&#xff0c;这是整个BSW层可以提供的服务&#xff0c;今天我们重点来讲一讲这个…

mac配置 iTerm2 使用lrzsz与服务器传输文件

mac配置 1. 安装支持rz和sz命令的lrzsz brew install lrzsz2. 下载iterm2-send-zmodem.sh和iterm2-recv-zmodem.sh两个脚本 # 克隆仓库 git clone https://github.com/aikuyun/iterm2-zmodem ~/iterm2-zmodem# 进入到仓库目录 cd ~/iterm2-zmodem# 设置脚本文件可执行权限 c…

两级式三相光伏并网逆变器Matlab/Simulink仿真模型

忘记更新最经典的光伏并网仿真模型了&#xff0c;作为包含经典的MPPT和并网恒功率因素的双闭环控制模型&#xff0c;也是很多相关专业学生的入门研究内容&#xff0c;光伏并网模型三相的和单相都有。 其中三相光伏并网逆变器有大功率和小功率的两种&#xff0c;之前早在硕士期…

人工智能之深度学习_[2]-PyTorch入门

PyTorch 1.PyTorch简介 1.1 什么是PyTorch PyTorch是一个基于Python的科学计算包 PyTorch安装 pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simplePyTorch一个基于Python语言的深度学习框架&#xff0c;它将数据封装成张量&#xff08;Tensor&#xff09;来进行…

ASP.NET Core - 配置系统之配置添加

ASP.NET Core - 配置系统之配置添加 2. 配置添加 2. 配置添加 配置系统可以读取到配置文件中的信息&#xff0c;那必然有某个地方可以将配置文件添加到配置系统中。之前的文章中讲到 ASP.NET Core 入口文件中&#xff0c;builder(WebApplicationBuilder 对象) 中有一个 Config…

GIS大模型:交通领域方面的应用

文章目录 1. 实时交通流量预测&#xff1a;2. 动态信号灯控制&#xff1a;3. 交通流模式识别&#xff1a;4. 交通事故预警&#xff1a;5. 路径推荐与导航优化&#xff1a;6. 长期交通规划&#xff1a;7. 事件影响分析&#xff1a;8. 智能停车管理&#xff1a; 大模型在交通流量…

Redis复制(replica)

Redis主从复制 [Redis主从复制]&#xff08;replica&#xff09;是一个多Redis实例进行数据同步的过程&#xff0c;其中一个实例是主实例&#xff08;Master&#xff09;&#xff0c;其他实例是从实例&#xff08;Slave&#xff09;。主实例负责处理命令请求&#xff0c;而从实…

零基础构建最简单的 Tauri2.0 桌面项目 Star 88.4k!!!

目录 预安装环境 安装nodejs windows下安装 linux下安装 nodejs常遇问题 安装C环境 介绍 下载 安装 安装Rust语言 Tauri官网 安装 vscode 安装 rust 插件 安装 Tauri 插件 运行成果 预安装环境 安装nodejs windows下安装 NodeJs_安装及下载_哔哩哔哩_bilibi…

wproxy客户端安装,代理返回JSON

文章目录 一、wproxy基础信息二、使用wproxy客户端代理返回参数 一、wproxy基础信息 https://github.com/avwo/whistle github https://wproxy.org/whistle/quickstart.html 快速上手 Whistle 是基于 Node.JS 实现的操作简单、功能强大的跨平台抓包调试工具&#xff0c;可作为…

小识MySQL中的OLTP和OLAP

前记&#xff1a;大家带着挑剔的眼光&#xff0c;多多批判和指正&#xff01;&#x1f64f; MySQL中的OLTP和OLAP是两种不同的数据库操作模式&#xff0c;它们各自针对不同的应用场景和需求。 OLTP&#xff08;Online Transaction Processing&#xff0c;联机事务处理&#x…

C++没有Y Combinator?使用 C++ 实现 Y Combinator(中英双语)

C 中并没有直接内置的 Y Combinator&#xff0c;但通过现代 C 特性&#xff08;如 lambda 表达式 和 std::function&#xff09;&#xff0c;我们可以实现一个类似 Y Combinator 的功能。 下面我们来详细讲解如何在 C 中实现 Y Combinator。 使用 C 实现 Y Combinator 目标 …

Ubuntu本地部署网站

目录 1.介绍 2.安装apache 3.网页升级 1.介绍 网站其实就相当于一个文件夹&#xff0c;用域名访问一个网页&#xff0c;就相当于访问了一台电脑的某一个文件夹&#xff0c;在网页中看见的视频&#xff0c;视频和音乐其实就是文件夹里面的文件。为什么网页看起来不像电脑文件夹…

Android SystemUI——StatusBar视图创建(六)

上一篇文章我们介绍了 StatusBar 的构建过程,在 makeStatusBarView() 中获得 FragmentHostManager,用来管理 StatusBar 的窗口。 一、状态栏视图 在得到 FragmentHostManager 实例对象之后,还会继续调用 addTagListener() 方法设置监听对象,然后获取 FragmentManager 并开…

jenkins-node节点配置

一.简述&#xff1a; Jenkins有一个很强大的功能&#xff1a; 即&#xff1a;支持分布式构建(jenkins配置中叫节点(node),也被称为slave)。分布式构建通常是用来吸收额外的负载。通过动态添加额外的机器应对构建作业中的高峰期&#xff0c;或在特定操作系统或环境运行特定的构建…

Elasticsearch的function_score与rescore的区别

文章目录 前言一、function_score二、rescore三、区别对比总结 前言 在 Elasticsearch 中&#xff0c;function_score 和 rescore 都是对查询结果进行评分调整的机制&#xff0c;但它们的用途、作用范围和执行阶段有所不同。 一、function_score rescore 是一个用于 查询后重…

Vscode——SSH连接不上的一种解决办法

一、完整报错: > @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ > IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! > Someone could be eavesdropping on you right now (man-in-the