163 - Missing Ranges
Written on November 5, 2015
Tweet
Given a sorted integer array where the range of elements are [lower, upper] inclusive, return its missing ranges. For example, given [0, 1, 3, 50, 75], lower = 0 and upper = 99, return [“2”, “4->49”, “51->74”, “76->99”].
public class Solution {
public List<String> findMissingRanges(int[] nums, int lower, int upper) {
List<String> result = new ArrayList<String>();
if (nums.length == 0) {
result.add(range(lower, upper));
return result;
}
if (lower < nums[i]) {
result.add(range(lower, nums[i] - 1));
}
for (int i = 1; i < nums.length; i++) {
if (nums[i] - nums[i - 1] > 1) {
result.add(range(nums[i - 1] + 1, nums[i] - 1));
}
}
if (upper > nums[nums.length - 1] {
result.add(range(nums[nums.length - 1] + 1, upper));
}
return result;
}
public String range(int n, int m) {
return n == m ? String.valueOf(n) : n + "->" + m;
}
}
class Solution:
def findMissingRanges(self, nums: List[int], lower: int, upper: int) -> List[str]:
if not nums:
return [self.helper(lower, upper)]
ret = []
if lower < nums[0]:
ret.append(self.helper(lower, nums[0] - 1))
for i in range(1, len(nums)):
if nums[i] > nums[i - 1] + 1:
ret.append(self.helper(nums[i - 1] + 1, nums[i] - 1))
if upper > nums[-1]:
ret.append(self.helper(nums[-1] + 1, upper))
return ret
def helper(self, lo, hi):
return str(lo) if lo == hi else str(lo) + "->" + str(hi)