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"].
从lower开始, 依次找数是否存在于nums. 存在就++, 不存在就把范围[next, nums[i] - 1]写入output, 并把数放到nums[i] + 1. 最后检查next <= upper, 注意这里别忘了等于号.
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;
}
}
时间复杂度O(N).