Gyh's Braindump

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

  • time: O(N)
  • space: O(1)