https://leetcode.com/problems/missing-ranges/description/
image.png
第一个简单的想法,就是LOWER开始,看第一个数组里的数是不是比LOWER大1,如果是,就是一个数的,如果不是,那么就可以形成一个区间。随后把LOWER更新到数+1.
这时有个问题,就是LOWER可能和当前数相等。那么我们就需要不断拉高LOWER直到和一个数不等为止。至此,整个算法的2个模块就出来了。
一个是不断调高LOWER,一个是比较后插入区间,更新LOWER
lOWER一直到最后一个,看和UPPER比较处理下EDGE CASE。
public List<String> findMissingRanges(int[] nums, int lw, int up) {
List<String> res = new ArrayList<>();
long lower = lw;
long upper = up;
int i = 0;
while(i<nums.length){
while(i<nums.length && lower >= nums[i]){
lower = (long)nums[i]+1;
i++;
}
if(i == nums.length) break;
if(lower+1 == nums[i]){
res.add(lower+"");
}else{
res.add(lower+"->"+((long)nums[i]-1));
}
lower = (long)nums[i]+1;
i++;
}
if(lower>upper) return res;
if(lower == upper){
res.add(lower+"");
}else{
res.add(lower+"->"+(upper));
}
return res;
}