要求
给定一个排序的整数数组 nums ,其中元素的范围在 闭区间 [lower, upper] 当中,返回不包含在数组中的缺失区间。
示例:
输入: nums = [0, 1, 3, 50, 75], lower = 0 和 upper = 99,
输出: ["2", "4->49", "51->74", "76->99"]
核心代码
class Solution:
def findMissingRanges(self, nums: List[int], lower: int, upper: int) -> List[str]:
start,end = lower,lower
res = []
for i in range(len(nums)):
if nums[i] == end:
start,end = nums[i] + 1,nums[i] + 1
elif nums[i] > end:
end = max(end,nums[i] - 1)
if end != start:
res.append(str(start) + "->" + str(end))
else:
res.append(str(start))
start,end = nums[i] + 1,nums[i] + 1
if start < upper:
res.append(str(start) + "->" + str(upper))
elif start == upper:
res.append(str(start))
return res
解题思路:双指针法,用start和end表示可能缺失的区间,如果真的缺失,就把缺失的区间插入到res里,否则重置start, end。