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"].
思路:和LC.228完全类似,let’s assume we iterate from left to right and now we arrive at index i ……(分析general case, base case, special case)
public List<String> findMissingRanges(int[] nums, int lower, int upper) {
//special case
List<String> res = new ArrayList<>();
if (nums.length == 0) {
group(res, lower, upper);
return res;
}
//base case
if (nums[0] != lower) {
group(res, lower, nums[0] - 1);
}
for (int i = 1; i < nums.length; i++) {
if (nums[i] != nums[i-1] + 1 && nums[i] != nums[i - 1]) {
group(res, nums[i-1] + 1, nums[i] - 1);
}
}
if (nums[nums.length - 1] != upper) {
group(res, nums[nums.length - 1] + 1, upper);
}
return res;
}
public void group(List<String> res, int start, int end) {
StringBuilder sb = new StringBuilder();
if (start == end) {
sb.append(start);
} else {
sb.append(start);
sb.append("->");
sb.append(end);
}
res.add(sb.toString());
}