给定一个排序的整数数组 nums ,其中元素的范围在 闭区间 [lower, upper] 当中,返回不包含在数组中的缺失区间。
示例:
输入: nums = [0, 1, 3, 50, 75], lower = 0 和 upper = 99,
输出: ["2", "4->49", "51->74", "76->99"]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/missing-ranges
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
双指针法,用start和end表示可能缺失的区间,
如果真的缺失,就把缺失的区间插入到res里,否则重置start, end。
class Solution(object):
def findMissingRanges(self, nums, lower, upper):
"""
:type nums: List[int]
:type lower: int
:type upper: int
:rtype: 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