乐趣区

关于c++:Leetcode专题数组163缺失的区间

力扣链接:https://leetcode-cn.com/probl…
解题思路:

  1. 这道题整体上自身比较简单,然而要解决的边界条件绝对比拟多
  2. 数组是排序的,那么在 [lower, upper] 这个区间中,如果没有缺失数字 / 区间的话,实践上每个数字都应该是相邻的,那么就能够从 lower 做为终点,顺次进行遍历,如果数组中的数字大于 lower 开始的游标 (每次比拟完 lower 加一),那么就阐明有缺失,此时的缺失能够分为两种状况:(1)只缺失了一个数字,那么 lower 就等于 nums[i] – 1 (2) 缺失多个数字:lower 就小于 nums[i] – 1.
  3. 最初整个数组遍历完结之后,游标此刻指向数组最初一个数 +1,然而 upper 不肯定和最初一个数相等,也有可能大于最初一个数字,那么这个时候就须要比拟游标和 upper 的大小,如果相等则将 upper 退出,如果 upper 大于 l, 那么退出 l ->upper
class Solution {
public:
    vector<string> findMissingRanges(vector<int>& nums, int lower, int upper) {
        long l = lower;
        vector<string> ans;
        for(int i = 0; i < nums.size(); ++i)
        {if(l == nums[i])
                l++;// 相等,我跳过你
            else if(l < nums[i])
            {    // 有空缺
                if(l < nums[i]-1)// 大于 1
                    ans.push_back(to_string(l)+"->"+to_string(nums[i]-1));
                else if(l == nums[i]-1)// 等于 1
                    ans.push_back(to_string(l));
                l = long(nums[i])+1;// 更新 l 到 nums[i]下一个数
                // [2147483647]
                // 0
                // 2147483647
            }
        }
        if(l < upper)
            ans.push_back(to_string(l)+"->"+to_string(upper));
        else if(l==upper)
            ans.push_back(to_string(l));
        return ans;
    }
};
退出移动版