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 - 1nums中的所有值都 互不相同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)
