[LeetCode] 163. Missing Ranges
Given a sorted integer array where the range of elements are in the inclusive range [lower, upper], 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"].
Thought process:
- Get missing range from lower to nums[0].
- Get missing ranges in nums.
- Get missing range from nums[len - 1] to upper.
Solution:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | class Solution { public List<String> findMissingRanges(int[] nums, int lower, int upper) { List<String> ranges = new ArrayList<>(); int len = nums.length; if (len == 0) { if (lower <= upper) { ranges.add(getRange(lower, upper)); } return ranges; } if (lower < nums[0]) { ranges.add(getRange(lower, nums[0] - 1)); } for (int i = 1; i < len; i++) { if (nums[i] > nums[i - 1] && nums[i - 1] != nums[i] - 1) { ranges.add(getRange(nums[i - 1] + 1, nums[i] - 1)); } } if (upper > nums[len - 1]) { ranges.add(getRange(nums[len - 1] + 1, upper)); } return ranges; } private String getRange(int lower, int upper) { if (lower == upper) { return lower + ""; } return lower + "->" + upper; } } |
Time complexity: O(n).
Comments
Post a Comment