Missing Ranges

Description

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"].

Hint

Train of Thought

要判断边界, 同时还要考虑数据溢出问题. e.g [1,1,1] 1, 1 return [] [2147483647],0,2147483647 return ["0 -> 2147483646"] [], 1, 1, return 1 [-1] -1, 0, return 0

以lower作为活动的指针

Code

public class Solution {
    public List<String> findMissingRanges(int[] nums, int lower, int upper) {
        List<String> res = new ArrayList<String>();

        if (nums == null || nums.length == 0) {//[], 1, 1, return 1
            res.add(getStr(lower, upper));
            return res;
        }


        for (int i = 0; i < nums.length; i++) {
            if (nums[i] == lower) {
                lower++;
                continue;
            } else if (lower < nums[i]){//[1,1,1] 1, 1 return []
                res.add(getStr(lower, nums[i] - 1));
                if(nums[i] == upper) {
                    return res;
                }
                lower = nums[i] + 1;//[2147483647],0,2147483647
            } 
        }

        if (lower <= upper) {//[-1] -1, 0
            res.add(getStr(lower, upper));
        }

        return res;
    }

    private String getStr(int i, int j) {
        if (i == j) {
            return String.valueOf(i);
        } else {
            return String.valueOf(i) + "->" + String.valueOf(j);
        }
    }

Complexity

results matching ""

    No results matching ""