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"].
代码写的不是很简洁,但是是自己写出来的。还是要多多借鉴厉害的人的代码。
这个题比较麻烦的是边界条件的处理,最后一个测试用例我懒得处理了,直接使用long型预防越界了。性能上不是很好,还需要参考下优秀的代码日后补上。
思路很简单,控制一个指针low,如果比当前的数字小,那么计算出一个结果保存到result当中, 然后更新low = num+1 ;其中要保证1. low<=upper 2. low< num, 其中num 是数组中的某个元素 3. 防止integer越界。
代码:
public List<String> findMissingRanges(int[] nums, int lower, int upper) {
List<String> result = new ArrayList<>();
if(nums == null || nums.length == 0) {
result.add(getNumber((int)lower, upper));
return result;
}
//正常情况下
long low = lower;
for(int num: nums){
if(low == num){
low++;
continue;
}
if(low>upper) break;
if(low<num){
result.add(getNumber((int)low, num-1));
low = (long)num+1;
}
//System.out.println("low"+low);
}
if(low<=upper){
result.add(getNumber((int)low, upper));
}
return result;
}
private String getNumber(int i, int j){
if(i == j) return Integer.toString(i);
return Integer.toString(i)+"->" + Integer.toString(j);
}