Missing Ranges

https://leetcode.com/problems/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"].

Thoughts

从lower开始, 依次找数是否存在于nums. 存在就++, 不存在就把范围[next, nums[i] - 1]写入output, 并把数放到nums[i] + 1. 最后检查next <= upper, 注意这里别忘了等于号.

Code

class Solution {
    public List<String> findMissingRanges(int[] nums, int lower, int upper) {
        List<String> res = new ArrayList<>();
        long next = lower;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] < next) {
                continue;
            }
            if (nums[i] == next) {
                next++;
                continue;
            }
            if (next == nums[i] - 1) {
                res.add(String.valueOf(next));
            } else {
                res.add(next + "->" + (nums[i] - 1));
            }
            next = (long)nums[i] + 1;
        }

        if (next <= upper) {
            if (next == upper) {
                res.add(String.valueOf(next));
            } else {
                res.add(next + "->" + upper);
            }
        }

        return res;
    }

}

Analysis

时间复杂度O(N).

Last updated