Given a sorted integer array nums, where the range of elements are in the inclusive range [lower, upper], return its missing ranges.
Example:
Input: nums =[0, 1, 3, 50, 75]
, lower = 0 and upper = 99, Output:["2", "4->49", "51->74", "76->99"]
缺失的区间。题意是给一个nums数组和一个lower下界,一个upper上界,请你返回在上下界之间的缺失的数字和range。
这个题跟228题很像,可以一块做。这个题是会有溢出的情况的所以一开始就需要把integer改成long。遍历nums的数字,首先第一个数字num如果 == lower,那就lower++,不断提高缺失的部分的下界,比如例子中的0和1;当num不等于lower的时候,此时又分两种情况,如果num == lower + 1说明只遗漏了一个数字,比如例子中的2,那么就把这一个数字加入结果集;还有一种情况是num很大,则需要返回一个range,[lower, num - 1]。
时间O(n)
空间O(1)
Java实现
1 class Solution { 2 public List<String> findMissingRanges(int[] nums, int lower, int upper) { 3 List<String> res = new ArrayList<>(); 4 long alower = (long) lower; 5 long aupper = (long) upper; 6 for (int num : nums) { 7 if (num == alower) { 8 alower++; 9 } else if (alower < num) { 10 if (alower + 1 == num) { 11 res.add(String.valueOf(alower)); 12 } else { 13 res.add(alower + "->" + (num - 1)); 14 } 15 alower = (long) num + 1; 16 } 17 } 18 if (alower == aupper) { 19 res.add(String.valueOf(alower)); 20 } else if (alower < aupper) { 21 res.add(alower + "->" + aupper); 22 } 23 return res; 24 } 25 }