[LeetCode] 163. Missing Ranges 缺失区间
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"]
这道题让我们求缺失区间,跟之前那道 Summary Ranges 很类似,给了一个空间的范围 [lower upper],缺失的区间的范围需要在给定的区间范围内。遍历 nums 数组,假如当前数字 num 大于 lower,说明此时已经有缺失区间,至少缺失一个 lower 数字,此时若 num-1 大于 lower,说明缺失的是一个区间 [lower, num-1],否则就只加入一个数字即可。由于 OJ 之后加入了许多 tricky 的 test cases,使得论坛上很多解法都 fail 了。其实很多是跪在了整型溢出,当数组中有整型最大值时,此时 lower 更新为 num+1 时就会溢出,所以在更新之前要先判断一下,若 num 已经是整型最大值了,直接返回结果 res 即可;否则才更新 lower 继续循环。for 循环退出后,此时可能还存在缺失区间,就是此时 lower 还小于等于 upper 时,可以会缺失 lower 这个数字,或者 [lower, upper] 区间,最后补上这个区间就可以通过啦,参见代码如下:
class Solution { public: vector<string> findMissingRanges(vector<int>& nums, int lower, int upper) { vector<string> res; for (int num : nums) { if (num > lower) res.push_back(to_string(lower) + (num - 1 > lower ? ("->" + to_string(num - 1)) : "")); if (num == upper) return res; lower = num + 1; } if (lower <= upper) res.push_back(to_string(lower) + (upper > lower ? ("->" + to_string(upper)) : "")); return res; } };
Github 同步地址:
https://github.com/grandyang/leetcode/issues/163
类似题目:
参考资料:
https://leetcode.com/problems/missing-ranges/
https://leetcode.com/problems/missing-ranges/discuss/50468/Accepted-Java-solution-8-lines-and-0ms
相关文章
- LeetCode 评论区:你管这难度叫简单???
- Leetcode: Longest Increasing Path in a Matrix
- Leetcode: Smallest Rectangle Enclosing Black Pixels
- Leetcode: Group Shifted Strings
- Leetcode: Same Tree
- leetcode Word Break I II 算法分析
- [LeetCode]1207. 独一无二的出现次数
- [LeetCode]5430. 设计浏览器历史记录
- 【Java数据结构与算法】LeetCode 0019. 删除链表的倒数第N个结点
- 【LeetCode】42. Trapping Rain Water
- Leetcode Find Minimum in Rotated Sorted Array 题解
- [LeetCode] 915. Partition Array into Disjoint Intervals 分割数组为不相交的区间
- [LeetCode] 485. Max Consecutive Ones 最大连续1的个数
- [LeetCode] 477. Total Hamming Distance 全部汉明距离
- [LeetCode] Summary Ranges 总结区间
- [LeetCode] 57. Insert Interval 插入区间
- leetcode 524. Longest Word in Dictionary through Deleting 通过删除字母匹配到字典里最长单词
- leetcode算法228.汇总区间