zoukankan      html  css  js  c++  java
  • 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"]

    解题思路:

    这道题首先我发现要我们返回string的字符串,所以对于每一个范围,我想写一个单独的方法来生成一个字符串,并将其加入到返回数组中,即toString。

    这个范围跟数组的关系并没有明确指出:

    可是数组中的数字都在范围中,也可能都不在范围中,也可能有部分在范围中。

    我们可以逐渐改变lower的值,来寻找缺失范围。

    从i=0开始遍历,当前值nums[i]与lower的关系有以下几种:

      1. num[i] == lower : 这时候lower++,检查范围中下一个数字。

      2. nums[i] > lower:代表缺失lower到nums[i]-1这个范围,但是nums[i]-1可能比upper要大,所以我们要取最小值。

                一定要记得!更新lower为nums[i]+1!!!!

      3. nums[i] < lower :还没到指定范围内,寻找下一个。

      因为有可能给定数组的都在给定范围的左边,所以我们要判断lower > upper: true则要退出数组

    代码:

    class Solution {
    public:
        vector<string> findMissingRanges(vector<int>& nums, int lower, int upper) {
            vector<string> ret;
            if(nums.size() == 0){
                toString(ret, lower, upper);
                return ret;
            }
            int start = -1, end = -1;
            for(int i = 0; i < nums.size(); i++){
                if(i > 0 && nums[i] == nums[i-1]) continue;
                if(nums[i] > lower){
                    start = lower;
                    end = min(nums[i]-1, upper);
                    toString(ret, start,end);
                    lower = nums[i]+1;
                }else if(nums[i] == lower){
                    lower++;
                }
                if(lower > upper) break;
            }
            int last = nums[nums.size()-1];
            if(last < upper){
                toString(ret, last+1, upper);
            }
            
            return ret;
        }
        void toString(vector<string> &ret, int start, int end){
            if(start == end){
                ret.push_back(to_string(start));
                return;
            }
            string str = to_string(start) + "->" + to_string(end);
            ret.push_back(str);
        }
    };
  • 相关阅读:
    lua时间戳和日期转换及踩坑【转】
    Js正则表达式验证输入是否有特殊字符【转】
    PHP数据类型转换【转】
    JavaScript indexOf() 方法
    CSS文本下划线 删除线 上划线【转】
    PHP中把stdClass Object转array的几个方法【转】
    2020软件工程作业02
    2020软件工程作业01
    2020 CCPC Wannafly Winter Camp Day1-F-乘法
    牛客-装货物
  • 原文地址:https://www.cnblogs.com/yaoyudadudu/p/9348926.html
Copyright © 2011-2022 走看看