Missing Ranges

题目地址:
https://leetcode.com/problems/missing-ranges/#/description

题目:
Given a sorted integer array where the range of elements are in the inclusive range [lowerupper], 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"].

解题思路:
这道题需要先了解如何构成最基本的range。并且在这之前和之后需要先handle一些corner case。

代码:

private String outputRange(int n, int m) {
    return (n == m)?String.valueOf(n) : n + "->" + m;
}

public List<String> findMissingRanges(int[] nums, int lower, int upper) {
    List<String> ranges = new ArrayList<String>();
    if (nums.length == 0) {  //Empty array misses the range lower->upper.        ranges.add(outputRange(lower, upper));
        return ranges;
    }
    int prev;
    long temp1 = (long)nums[0] - (long)lower;
    if (temp1 > 0) {    //Handles lower boundary. Notice "inclusive".        ranges.add(outputRange(lower, nums[0] - 1));
        prev = nums[0];
    }
    else {
        prev = lower;
    }
    for (int cur : nums) {
        long temp2 = (long)cur - (long)prev;
        if (temp2 > 1) {
            ranges.add(outputRange(prev + 1, cur - 1)); //Misses range if distance > 1.        }
        prev = cur;
    }
    long temp3 = (long)upper - (long)prev;
    if (temp3 > 0) {  //Handles the upper boundary.        ranges.add(outputRange(prev + 1, upper));
    }

    return ranges;
}







Comments

Popular Posts