228. 汇总区间
1. 题目
给定一个 无重复元素 的 有序 整数数组 nums
。
返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也就是说,nums
的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums
的数字 x
。
列表中的每个区间范围 [a,b]
应该按如下格式输出:
"a->b"
,如果a != b
"a"
,如果a == b
示例 1:
1 | 输入:nums = [0,1,2,4,5,7] |
示例 2:
1 | 输入:nums = [0,2,3,4,6,8,9] |
提示:
0 <= nums.length <= 20
-2^31 <= nums[i] <= 2^31 - 1
nums
中的所有值都 互不相同nums
按升序排列
2. 思路
- 已知数组
nums
为升序排列,初始化l
左指针与r
右指针 - 遍历
nums
数组,当其右指针r
大于0时,将其与前一位的数值进行比较:- 如果当前的数值与前一位的数值不构成连续序列,则判断
l
指针与r
指针是否一致- 如果
l
指针与r
指针一致,则写入格式为${nums[r - 1]}
- 如果
l
指针与r
指针不一致,则写入格式为${nums[l]} -> ${nums[r - 1]}
- 如果
- 因为不构成连续序列,因此需要更新
l
指针为当前的r
指针 - 如果当前数值与前一位数值可以构成连续序列,则无需任何操作
- 如果当前的数值与前一位的数值不构成连续序列,则判断
- 每次遍历时,
r
指针都需要稳步向右移动一位 - 遍历结束后,需要单独对
r
指针做判断,将最后一段链加入结果集
3. 代码
1 | class Solution { |
4. 复杂度
- 时间复杂度:O(n)
- 空间复杂度:O(1)