C++实现LeetCode(163.缺失区间)

 更新时间:2021年07月31日 14:39:21   作者:Grandyang  
这篇文章主要介绍了C++实现LeetCode(163.缺失区间),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下

[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"]

这道题让我们求缺失区间,跟之前那道 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

类似题目:

Summary Ranges

参考资料:

https://leetcode.com/problems/missing-ranges/

https://leetcode.com/problems/missing-ranges/discuss/50468/Accepted-Java-solution-8-lines-and-0ms

到此这篇关于C++实现LeetCode(163.缺失区间)的文章就介绍到这了,更多相关C++实现缺失区间内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅析C++中前置声明的应用与陷阱

    浅析C++中前置声明的应用与陷阱

    以下是对C++中前置声明的应用与陷阱进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • Qt中JSON使用的详细步骤

    Qt中JSON使用的详细步骤

    本文主要介绍了Qt中JSON使用的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-08-08
  • C++实现LeetCode(81.在旋转有序数组中搜索之二)

    C++实现LeetCode(81.在旋转有序数组中搜索之二)

    这篇文章主要介绍了C++实现LeetCode(81.在旋转有序数组中搜索之二),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C语言格式化输入输出函数详解

    C语言格式化输入输出函数详解

    本文给大家分享的是c语言中2个格式化输入输出的函数printf()和scanf()的使用方法的说明及其组合方式的表单,非常详细,推荐给大家,希望对大家能够有所帮助。
    2015-03-03
  • C++编程中的或||、与&&、非!逻辑运算符基本用法整理

    C++编程中的或||、与&&、非!逻辑运算符基本用法整理

    这篇文章主要介绍了C++中的或||、与&&、非!逻辑运算符基本用法整理,是C++入门学习中的基础知识,需要的朋友可以参考下
    2016-01-01
  • C语言实现简单猜数字游戏

    C语言实现简单猜数字游戏

    这篇文章主要为大家详细介绍了C语言实现简单猜数字游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • C++实现LeetCode(14.最长共同前缀)

    C++实现LeetCode(14.最长共同前缀)

    这篇文章主要介绍了C++实现LeetCode(14.最长共同前缀),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 结构体对齐的规则详解及C++代码验证

    结构体对齐的规则详解及C++代码验证

    在c语言的结构体里面一般会按照某种规则去进行字节对齐。本文就来介绍一下如何实现,具有一定的参考价值,感兴趣的可以了解下
    2021-08-08
  • C++实现井字棋游戏

    C++实现井字棋游戏

    这篇文章主要为大家详细介绍了C++实现井字棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • visual studio 2019工具里添加开发中命令提示符的方法

    visual studio 2019工具里添加开发中命令提示符的方法

    这篇文章主要介绍了visual studio 2019工具里添加开发中命令提示符的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03

最新评论