[LeetCode] 163. Missing Ranges

Given a sorted integer array nums, where the range of elements are in the inclusive range [lowerupper], 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 }

 

LeetCode 题目总结

上一篇:Tomcat启动错误,端口占用


下一篇:5.10.1. Overview