163. Missing Ranges
- tags
- trick, type range
- source
- leetcode
Edge Cases
[-2147483648,-2147483648,0,2147483647,2147483647]
-2147483648
2147483647
Solution
class Solution {
public List<String> findMissingRanges(int[] nums, int lower, int upper) {
List<String> res = new LinkedList<>();
if (nums.length == 0) {
res.add(fromRange(lower, upper));
return res;
}
if (nums[0] > lower) res.add(fromRange(lower, nums[0] - 1));
for (int i = 0; i < nums.length - 1; i++) {
// the first condition is to ensure nums[i] + 1 won't exceed int range
if (nums[i + 1] != nums[i] && nums[i + 1] > nums[i] + 1) {
res.add(fromRange(nums[i] + 1, nums[i + 1] - 1));
}
}
if (nums[nums.length - 1] < upper) res.add(fromRange(nums[nums.length - 1] + 1, upper));
return res;
}
private String fromRange(int left, int right) {
return left == right ? "" + left : left + "->" + right;
}
}
Complexity