给定一个 无重复元素 的 有序 整数数组 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 按升序排列
class Solution(object):
def summaryRanges(self, nums):
"""
:type nums: List[int]
:rtype: List[str]
"""
t=[]
l,r=0,0
while r<len(nums):
if r<len(nums)-1 and nums[r]+1==nums[r+1]:
r+=1
else:
if l==r:
t.append(str(nums[l]))
else:
t.append(str(nums[l])+'->'+str(nums[r]))
r+=1
l=r
return t
双指针还是不太理解 ,思维方式有待提高
以下是chatgpt生成的代码解释:
这段代码实现了一个 "总结区间" 的功能,即将连续的数值区间表示成一个范围。
具体来说,函数 summaryRanges
接受一个整数列表 nums
作为输入,并返回一个带整数范围的字符串列表。该函数使用双指针算法来遍历整个数组 nums
,在处理过程中动态地寻找连续的区间。
具体做法是:用两个指针 l
和 r
分别指向当前区间的左端点和右端点。然后检查右指针是否可以向右移动,如果下一个数与当前数相邻,说明当前区间可继续扩展,右指针向右移动一位。如果不是,则说明已经到达当前区间的最后一个数,需要将当前区间总结为一个字符串并将其添加到结果列表中。
当左指针和右指针相同时,说明当前区间只包含一个数组元素,直接将该元素转换为字符串并添加到结果列表中。否则,说明当前区间包含多个连续的数组元素,需要使用 "start->end" 格式进行总结。最后,将右指针加1,重置左指针,进入下一个循环。
最终,函数返回一个字符串列表,其中每个元素表示原始数组中连续的数值区间。