数组区间专题,Leetcode228:给定一个无重复元素的数组nums,返回恰好覆盖数组中所有数字的最小有序区间范围列表。
这道题使用双指针可能很好的处理边界条件,慢指针指向区间的起始位置,快指针指向区间的末尾,因此当快指针从慢指针开始遍历直到不满足连续递增则代表当前区间结束,然后将slow=fast+1作为下一个区间的开始,fast继续向后遍历找下一个区间的结束,如此循环,直到数组遍历完毕。
代码参考下图:
class Solution:
def summaryRanges(self, nums: List[int]) -> List[str]:
slow, fast = 0, 0
res = []
while fast < len(nums):
if(fast + 1 != len(nums) and nums[fast + 1] == nums[fast] + 1):
fast += 1
# print(slow, fast)
else:
res.append((nums[slow], nums[fast]))
slow = fast + 1
fast = fast + 1
def p(x):
slow, fast = x
if slow == fast:
return str(slow)
else:
return str(slow) + '->' + str(fast)
return list(map(p, res))