友情支持
如果您觉得这个笔记对您有所帮助,看在D瓜哥码这么多字的辛苦上,请友情支持一下,D瓜哥感激不尽,😜
有些打赏的朋友希望可以加个好友,欢迎关注D 瓜哥的微信公众号,这样就可以通过公众号的回复直接给我发信息。
公众号的微信号是: jikerizhi 。因为众所周知的原因,有时图片加载不出来。 如果图片加载不出来可以直接通过搜索微信号来查找我的公众号。 |
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
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/**
* @author D瓜哥 · https://www.diguage.com
* @since 2025-06-14 21:50:13
*/
public List<String> summaryRanges(int[] nums) {
List<String> result = new ArrayList<>();
int start = -1;
for (int i = 0; i < nums.length; i++) {
if (i < nums.length - 1 && nums[i] + 1 == nums[i + 1]) {
if (start == -1) {
start = i;
}
} else {
if (start == -1) {
result.add(String.valueOf(nums[i]));
} else {
result.add(nums[start] + "->" + nums[i]);
start = -1;
}
}
}
return result;
}