Missing Ranges

easy array

Problem

Given a sorted unique integer array nums and inclusive range [lower, upper], return the smallest sorted list of inclusive ranges [a, b] that cover exactly the missing numbers — those in [lower, upper] that are not in nums.

Inputnums = [0, 1, 3, 50, 75], lower = 0, upper = 99
Output[[2, 2], [4, 49], [51, 74], [76, 99]]
Compare consecutive values (with prev = lower-1, sentinel upper+1 at the end) and emit each gap.

def find_missing_ranges(nums, lower, upper):
    res = []
    prev = lower - 1
    for i in range(len(nums) + 1):
        cur = nums[i] if i < len(nums) else upper + 1
        if cur - prev >= 2:
            res.append([prev + 1, cur - 1])
        prev = cur
    return res
function findMissingRanges(nums, lower, upper) {
  const res = [];
  let prev = lower - 1;
  for (let i = 0; i <= nums.length; i++) {
    const cur = i < nums.length ? nums[i] : upper + 1;
    if (cur - prev >= 2) {
      res.push([prev + 1, cur - 1]);
    }
    prev = cur;
  }
  return res;
}
class Solution {
    public List<List<Integer>> findMissingRanges(int[] nums, int lower, int upper) {
        List<List<Integer>> res = new ArrayList<>();
        long prev = (long) lower - 1;
        for (int i = 0; i <= nums.length; i++) {
            long cur = i < nums.length ? nums[i] : (long) upper + 1;
            if (cur - prev >= 2) {
                res.add(Arrays.asList((int)(prev + 1), (int)(cur - 1)));
            }
            prev = cur;
        }
        return res;
    }
}
vector<vector<int>> findMissingRanges(vector<int>& nums, int lower, int upper) {
    vector<vector<int>> res;
    long long prev = (long long) lower - 1;
    for (int i = 0; i <= (int) nums.size(); i++) {
        long long cur = i < (int) nums.size() ? nums[i] : (long long) upper + 1;
        if (cur - prev >= 2) {
            res.push_back({(int)(prev + 1), (int)(cur - 1)});
        }
        prev = cur;
    }
    return res;
}
Time: O(n) Space: O(1) extra (excluding output)