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

【面试经典150 | 区间】汇总区间

文章目录

  • Tag
  • 题目来源
  • 题目解读
  • 解题思路
    • 方法一:一次遍历
    • 复杂度分析
  • 其他语言
    • python3
    • C
  • 写在最后

Tag

【一次遍历】【数组】【字符串】


题目来源

228. 汇总区间


题目解读

给定一个无重复的升序数组 nums,需要将这个数组按照以下规则进行汇总:

  • 对于数组中的连续整数,比如0, 1, 2,输出连续区间"0->2"
  • 对于数组中的非连续整数,比如数组[0, 1, 2, 4]中的4,输出单独区间"4"

最后输出数组nums的汇总字符串。


解题思路

数据规模很小,时间复杂度上无需担心。

但是,数组中的数据值可能会取到int整型数据的边界处,边界处的+-*/计算容易越界,需要小心。比如 -2147483647 - -2147483648就会报错。

方法一:一次遍历

从数组0位置出发,向右遍历。使用start指针记录连续元素的起始值,end记录连续元素的终点值,在遍历中动态维护两个指针,在遍历过程中:

  • 如果start != end,则输出字符串"start->end"
  • 如果start == end,则表明该数字不属于任何连续的区间,需要作为一个单独的区间元素输出。

实现代码

class Solution {
public:vector<string> summaryRanges(vector<int>& nums) {vector<string> ret;int n = nums.size();int start, end;for (int i = 0; i < n;) {start = i;++i;while (i < n && nums[i] == nums[i-1] + 1) {++i;}end = i - 1;string tmp = to_string(nums[start]);if (start < end) {tmp += "->";tmp += to_string(nums[end]);}ret.push_back(tmp);}return ret;}
};

复杂度分析

时间复杂度: O ( n ) O(n) O(n) n n n 为数组 num 的长度。

空间复杂度: O ( 1 ) O(1) O(1),只使用了有限个变量。


其他语言

python3

class Solution:def summaryRanges(self, nums: List[int]) -> List[str]:res = []i = 0n = len(nums)while i < n:    # i 是连续的左端点j = i       # j 是连续的右端点while j + 1 < n and nums[j+1] == nums[j] + 1:j += 1strs = str(nums[i]) if i == j else f'{nums[i]}->{nums[j]}'res.append(strs)i = j + 1return res

C

/*** Note: The returned array must be malloced, assume caller calls free().*/
char ** summaryRanges(int* nums, int numsSize, int* returnSize){char** res = malloc(sizeof(char*) * numsSize);*returnSize = 0;int i = 0;while (i < numsSize) {int low = i;++i;while (i < numsSize && nums[i] == nums[i-1] + 1) {++i;}int high = i - 1;char* tmp = malloc(sizeof(char) * 25);sprintf(tmp, "%d", nums[low]);if (low < high) {sprintf(tmp + strlen(tmp), "->");sprintf(tmp +strlen(tmp), "%d", nums[high]);}res[(*returnSize)++] = tmp;}return res;
}

sprintf 是一个 C 标准库函数,用于将格式化的数据写入字符串中,而不是标准输出流或文件。它的使用方式类似于 printf,但它不会将输出写入控制台,而是将其存储在指定的字符串中。


写在最后

如果文章内容有任何错误或者您对文章有任何疑问,欢迎私信博主或者在评论区指出 💬💬💬。

如果大家有更优的时间、空间复杂度方法,欢迎评论区交流。

最后,感谢您的阅读,如果感到有所收获的话可以给博主点一个 👍 哦。

相关文章:

【面试经典150 | 区间】汇总区间

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;一次遍历复杂度分析 其他语言python3C 写在最后 Tag 【一次遍历】【数组】【字符串】 题目来源 228. 汇总区间 题目解读 给定一个无重复的升序数组 nums&#xff0c;需要将这个数组按照以下规则进行汇总&#xff1…...

主流接口测试框架对比

公司计划系统的开展接口自动化测试&#xff0c;需要我这边调研一下主流的接口测试框架给后端测试&#xff08;主要测试接口&#xff09;的同事介绍一下每个框架的特定和使用方式。后端同事根据他们接口的特点提出一下需求&#xff0c;看哪个框架更适合我们。 需求 1、接口编写…...

LeetCode 150.逆波兰表达式求值

题目链接 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目解析 首先我们需要知道什么是逆波兰表达式&#xff0c;像我们平常遇到的都是中缀表达式&#xff0c;然而逆波兰确实后缀表达式&#xff0c;因此这个题目隐含的意思就是将一个后缀表达式转…...

华为---企业WLAN组网基本配置示例---AC+AP组网

ACAP组网所需的物理条件 1、无线AP---收发无线信号&#xff1b; 2、无线控制器(AC)---用来控制管理多个AP&#xff1b; 3、PoE交换机---能给AP实现网络连接和供电的交换机&#xff1b; 4、授权&#xff1a;默认AC管理的AP数量有限&#xff0c;买授权才能管控更多AP。 WLAN创建…...

循环结构的运用

乘法口诀起源于中国&#xff0c;是古代人进行乘法、除法、开方等运算的基本法则&#xff0c;距今已经有两千多年的历史了&#xff0c;如何运用现代计算机技术快速写出九九乘法表呢&#xff1f; 循环结构可以用来重复执行一条或者多条语句&#xff0c;利用循环结构可以减少源程序…...

深度强化学习第 1 章 机器学习基础

1.1线性模型 线性模型&#xff08;linear models&#xff09;是一类最简单的有监督机器学习模型&#xff0c;常被用于简单的机 器学习任务。可以将线性模型视为单层的神经网络。本节讨论线性回归、逻辑斯蒂回归&#xff08;logistic regression&#xff09;、 softmax 分类器等…...

第一章 STM32 CubeMX (CAN通信发送)基础篇

第一章 STM32 CubeMX &#xff08;CAN通信&#xff09;基础篇 文章目录 第一章 STM32 CubeMX &#xff08;CAN通信&#xff09;基础篇STM32中文手册简介简介stm32f1系列CAN的特点CAN连接网络示意图硬件电路CAN波特率计数 一、 STM32 CubeMX设置设置波特率工程目录结构添加CAN驱…...

原子性操作

原子性操作是指一个操作在执行过程中不会被中断&#xff0c;要么全部执行成功&#xff0c;要么全部不执行&#xff0c;不会出现部分执行的情况。原子性操作对于多线程并发编程至关重要&#xff0c;因为它可以确保多个线程之间不会出现竞态条件或数据不一致性。 在计算机科学中…...

论文阅读:Segment Any Point Cloud Sequences by Distilling Vision Foundation Models

目录 概要 Motivation 整体架构流程 技术细节 小结 论文地址&#xff1a;[2306.09347] Segment Any Point Cloud Sequences by Distilling Vision Foundation Models (arxiv.org) 代码地址&#xff1a;GitHub - youquanl/Segment-Any-Point-Cloud: [NeurIPS23 Spotlight]…...

Netty 入门 — 亘古不变的Hello World

这篇文章我们正式开始学习 Netty&#xff0c;在入门之前我们还是需要了解什么是 Netty。 什么是 Netty 为什么很多人都推崇 Java boy 去研究 Netty&#xff1f;Netty 这么高大上&#xff0c;它到底是何方神圣&#xff1f; 用官方的话说&#xff1a;Netty 是一款异步的、基于事…...

idea插件开发javax.net.ssl.SSLException: No PSK available. Unable to resume.

idea插件开发,编译出错 javax.net.ssl.SSLException: No PSK available. Unable to resume.at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:129)at java.base/sun.security.ssl.Alert.createSSLException(Alert.java:117)at java.base/sun.security.ssl.…...

Selenium的WebDriver操作页面的超时或者元素重叠引起的ElementClickInterceptedException

超时 处理由页面加载引起的超时是在使用 Selenium 进行自动化测试中常见的任务。页面加载可能因网络速度慢、页面复杂性或异步操作而导致超时。以下是一些处理页面加载超时的方法&#xff1a; 1.设置隐式等待时间&#xff1a; 使用 implicitly_wait 方法可以设置隐式等待时间…...

oracle数据库的缓存设置

Oracle缓存由两个参数控制SGA_TARGET和PGA_AGGREGATE_TARGET&#xff0c;设置了这两个参数&#xff0c;其他的基本内存部分都由Oracle自动配置为最优值&#xff0c;这也是Oracle推荐的方式。 SGA_TARGET 和PGA_AGGREGATE_TARGET是动态参数&#xff0c;可以在不重启数据库的情况…...

算法通关村第一关-链表青铜挑战笔记

欢迎来到 : 第一关青铜关 java如何创建链表链表怎么增删改查 我们先了解链表 单链表的概念 我们从简单的创建和增删改查开始. 链表的概念 线性表分为顺序表(数组组成)和链表(节点组成) . 链表又分: 单向 双向有哨兵节点 无哨兵节点循环 不循环 链表是一种物理存储单…...

✔ ★【备战实习(面经+项目+算法)】 10.15学习时间表

✔ ★【备战实习&#xff08;面经项目算法&#xff09;】 坚持完成每天必做如何找到好工作1. 科学的学习方法&#xff08;专注&#xff01;效率&#xff01;记忆&#xff01;心流&#xff01;&#xff09;2. 每天认真完成必做项&#xff0c;踏实学习技术 认真完成每天必做&…...

pytorch 训练时raise EOFError EOFError

训练到一半时获取验证数据报错 报错代码 imgs next(iter(val_dataloader)) val_dataloader DataLoader(ImageDataset("data/%s" % opt.dataset_name, transforms_transforms_, unalignedTrue, mode"test"),batch_size5,shuffleTrue,num_workers2,)def …...

node.js+NPM包管理器+Webpack打包工具+前端项目搭建

javascript运行环境&#xff08;无需依赖html文件&#xff09; BFF&#xff0c;服务于前端的后端 官网下载安装&#xff0c;node -v查看是否安装成功 ①、创建一个01.js文件 //引入http模块 const httprequire(http)//创建服务器 http.createServer(function(request,respo…...

PCL点云处理之基于FPFH特征的全局配准流程具体实现(二百二十一)

PCL点云处理之基于FPFH特征的全局配准流程具体实现(二百二十一) 一、算法介绍二、算法实现1.代码2.效果一、算法介绍 PCL点云库提供的多种工具,可以组合为一套完整的点云配准流程,这里选择FPFH特征,进行具体的配准流程实现,主要内容包括点云读取、点云法线计算、点云特征…...

ai_drive67_基于不确定性的多视图决策融合

论文链接&#xff1a;https://openreview.net/forum?idOOsR8BzCnl5 https://arxiv.org/abs/2102.02051 代码链接&#xff1a;https://github.com/hanmenghan/TMC Zongbo Han, Changqing Zhang, Huazhu Fu, Joey Tianyi Zhou, Trusted Multi-View Classification, Internatio…...

Docker逃逸---procfs文件挂载

一、产生原因 将宿主机/proc目录挂载进了容器&#xff0c;而该目录内的/proc/sys/kernel/core_pattern文件是负责进程奔溃时内存数据转储的&#xff0c;当第一个字符是| 管道符时&#xff0c;后面的部分会以命令行的方式进行解析并运行&#xff0c;攻击者可以将恶意文件写入该…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

地震勘探——干扰波识别、井中地震时距曲线特点

目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波&#xff1a;可以用来解决所提出的地质任务的波&#xff1b;干扰波&#xff1a;所有妨碍辨认、追踪有效波的其他波。 地震勘探中&#xff0c;有效波和干扰波是相对的。例如&#xff0c;在反射波…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

23-Oracle 23 ai 区块链表(Blockchain Table)

小伙伴有没有在金融强合规的领域中遇见&#xff0c;必须要保持数据不可变&#xff0c;管理员都无法修改和留痕的要求。比如医疗的电子病历中&#xff0c;影像检查检验结果不可篡改行的&#xff0c;药品追溯过程中数据只可插入无法删除的特性需求&#xff1b;登录日志、修改日志…...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具&#xff0c;在大规模数据获取中发挥着关键作用。然而&#xff0c;传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时&#xff0c;常出现数据质…...