Given a sorted integer array wherethe range of elements are in the inclusive range [lower, upper], return its missing ranges.
Have you met this question in a real interview?
Yes
Example
Given nums =[0, 1, 3, 50, 75]
, lower =0
and upper =99
return["2", "4->49", "51->74", "76->99"]
.
class Solution:
"""
@param: nums: a sorted integer array
@param: lower: An integer
@param: upper: An integer
@return: a list of its missing ranges
"""
#thinking process
#scan the list and compare with its previous value to identiy the gap
#may encounter three senarios
#[0, 1, 3, 50, 51, 52, 53, 54, 99]
#遇到区间问题,可以将其转化为 段
#lower -> 1st - > 2nd -> 3rd -> 4th -> upper
#corner cases
#if the input list is empty
#if the int exceeds int limit 2^31
def findMissingRanges(self, nums, lower, upper):
# write your code here
if not nums or len(nums) == 0:
if upper - lower > 1:
return ["->".join([str(lower), str(upper)])]
else:
return [str(lower)]
ans = []
for i in range(len(nums)):
if lower < nums[i]:
if nums[i] - lower > 1:
ans.append("->".join([str(lower), str(nums[i] - 1)]))
else:
ans.append(str(lower))
lower = nums[i] + 1
if lower < upper:
ans.append("->".join([str(lower), str(upper)]))
elif lower == upper:
ans.append(str(lower))
return ans