题目:
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"}
public class QuestionMissingRanges {
public static void main(String[] args) {
int[] nums = {0, 1, 3, 50, 75};
int lower = 0;
int upper = 99;
List<String> rst = findMissingRanges(nums, lower, upper);
System.out.println(rst.toString());
}
public static List<String> findMissingRanges(int[] nums, int lower, int upper) {
//step1 define return value
List<String> rst = new ArrayList<>();
//step2 handle corner cases
if (nums == null || nums.length == 0){
rst.add(lower + "->" + upper);
return rst;
}
//stop3: Fill in business logic
//first, add the range after lower
addToList(rst, lower,nums[0] - 1);
//second, add all ranges between lower and uppper
int prev = nums[0];
int i = 1;
while(i < nums.length){
int cur = nums[i];
if (cur != prev + 1){
addToList(rst,prev + 1,cur - 1);
}
prev = cur;
i++;
}
//third, add the range before uppper
addToList(rst,nums[nums.length - 1] + 1, upper);
return rst;
}
//supporting method
public static void addToList(List<String> rst, int start, int end){
if (start == end){
rst.add(String.valueOf(start));//convert integer to string
}else if (start < end){
rst.add(start + "->" + end);
}
}
}