leetcode_163 缺失的区间

1,177 阅读1分钟

要求

给定一个排序的整数数组 nums ,其中元素的范围在 闭区间 [lower, upper] 当中,返回不包含在数组中的缺失区间。

示例:

输入: nums = [0, 1, 3, 50, 75], lower = 0upper = 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

image.png

解题思路:双指针法,用start和end表示可能缺失的区间,如果真的缺失,就把缺失的区间插入到res里,否则重置start, end。