LeetCode 228 数组越界问题和字符串拼接

news/2025/1/15 19:55:53/

1.题目描述

给定一个无重复元素的有序整数数组 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. 代码

    //代码优化public List<String> summaryRanges1(int[] nums) {List<String> res = new ArrayList<>();// i 初始指向第 1 个区间的起始位置int i = 0;for (int j = 0; j < nums.length; j++) {if (j + 1 == nums.length || nums[j] + 1 != nums[j + 1]) {// 将当前区间 [i, j] 写入结果列表StringBuilder sb = new StringBuilder();sb.append(nums[i]);if (i != j) {sb.append("->").append(nums[j]);}res.add(sb.toString());// 将 i 指向更新为 j + 1,作为下一个区间的起始位置i = j + 1;}}return res;}

学习点 1:

数组越界问题: if的条件判断顺序必须是 if ( i+1 == n || nums[i+1] - nums[i] != 1 )
而不能是 if ( nums[i+1] - nums[i] != 1 || i+1 == n ), 因为程序执行顺序是从左往右的, 在到边界时:i+1 == n == 越界值,在顺序1语句可以通过进入i+1 == n判断就不再进入第二个判断,就不会导致 nums[i+1] ( nums[越界值])出现数组越界问题。

学习点 2:

方式1:

Integer.toString(nums[i]) + "->" + Integer.toString(nums[j]);

方式2:

StringBuilder sb = new StringBuilder();
sb.append(nums[i]).append("->").append(nums[j]);

数组拼接时,采用的是方式 2 创建StringBuilder的方式(效率高),而不是用方式1直接相加的方式(效率低)。
原因是:append方法不会创建新的string对象,而String + String的计算方法每次都重新创建一个String对象,重新开辟一段内存。


http://www.ppmy.cn/news/319965.html

相关文章

LeetCode 228 汇总区间 HERODING的LeetCode之路

给定一个无重复元素的有序整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖&#xff0c;并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围 [a,b] 应该按如下格…

leetcode--python--228

228. 汇总区间 给定一个无重复元素的有序整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表。也就是说&#xff0c;nums 的每个元素都恰好被某个区间范围所覆盖&#xff0c;并且不存在属于某个范围但不属于 nums 的数字 x 。 列表中的每个区间范围 [a…

redis五种数据类型具体时候的底层编码

redis随着值的类型不同&#xff0c;其在底层编码类型会不相同。目前现有的编码格式有 #define OBJ_ENCODING_RAW 0 /* Raw representation */ #define OBJ_ENCODING_INT 1 /* Encoded as integer */ #define OBJ_ENCODING_HT 2 /* Encoded as hash table */ #def…

C语言——修改控制台背景色和字体颜色

C语言——修改控制台背景色和字体颜色 方法一&#xff1a;system(“color NUM1NUM2”) system("color NUM1NUM2");可以用库函数system(“color NUM1NUM2”)实现 需要头文件 <stdlib.h> NUM1,NUM2均为16进制数 NUM1控制控制台背景色&#xff0c;NUM2控制前…

数字图像处理与Python实现-图像增强经典算法汇总

图像增强经典算法汇总 文章目录 图像增强经典算法汇总1、像素变换2、图像逆变换3、幂律变换4、对数变换5、图像均衡化6、对比度受限自适应直方图均衡(CLAHE)7、对比度拉伸8、Sigmoid校正9、局部对比度归一化10、总结本文将对图像增强经典算法做一个简单的汇总。图像增强的经典…

OPPO A7X 刷机小结

OPPO A7X 刷机小结&#xff1a; 概述&#xff1a;根据网上找到的教程&#xff08;MTK模式刷机教程&#xff09;&#xff0c;没有成功。在QQ上询问一位提供刷机服务的大神&#xff0c;说是只有老版本才能刷。 操作步骤&#xff1a; 刷机工具&#xff1a; MediaTek SP Flash Tool…

A7x linux游戏,oppoa7x中将游戏空间开启的具体操作流程

oppoa7x手机中有个游戏空间&#xff0c;各位小伙伴们知道打开这个游戏空间的方法吗?下文就为你们分享了oppoa7x中将游戏空间开启的具体操作流程。 一&#xff1a;游戏收纳盒&#xff0c;让游戏有个专属空间 游戏空间打开方式&#xff1a;【桌面应用图标】——【游戏空间】——…

惠普暗影精灵2更新bios系统,防止电池鼓包

https://support.hp.com/cn-zh/drivers/selfservice/omen-by-hp-15-ax000-laptop-pc-series/10862325/model/12732710 bios版本怎么看?查看电脑bios版本的三种方法 http://www.kqidong.com/bios/3761.html