C ++中缺少范围

假设我们有一个排序的整数数组nums,元素的范围在包含范围[lower,upper],我们必须找到缺失的范围。

因此,如果输入类似于nums = [0,1,3,50,75],下限值是0,上限值是99,那么输出将是[“ 2”,“ 4-> 49”,“ 51-> 74“,” 76-> 99“]

为了解决这个问题,我们将遵循以下步骤-

  • 定义一个数组

  • 定义一组v

  • 对于初始化i:= 0,当i <t的大小时,更新(将i增加1),执行-

    • 将t [i]插入v

    • 在数字末尾插入t [i]

    • 如果t [i]不在v中,则-

    • 定义一个称为ret的数组

    • curr:=降低

    • i:= 0,n:= nums的大小

    • 而curr <= upper时,执行-

      • temp:=将curr转换为字符串

      • (增加curr 1)

      • 如果i <n并且nums [i]与curr相同,则-

      • 除此以外

      • 在ret的末尾插入temp

      • 忽略以下部分,跳至下一个迭代

      • temp:=“->”

      • curr:= nums [i]

      • temp:= temp连接为字符串(curr-1)

      • curr:= nums [i]

      • 在ret的末尾插入temp

      • 如果curr <= upper,则-

      • 在ret的末尾插入temp

      • temp:=“->”

      • temp:= temp将大写形式连接为字符串

      • curr:=上限+ 1

      • 如果i与n相同,则-

      • 除此以外

      • (将i增加1)

      • (增加curr 1)

      • 如果i <n并且nums [i]与curr相同,则-

      • 除此以外

      • 返回ret

      例 

      让我们看下面的实现以更好地理解-

      #include <bits/stdc++.h>
      using namespace std;
      void print_vector(vector<auto< v){
         cout << "[";
         for(int i = 0; i<v.size(); i++){
            cout << v[i] << ", ";
         }
         cout << "]"<<endl;
      }
      class Solution {
      public:
         vector<string< findMissingRanges(vector<int<& t, int lower, int upper) {
            vector <int< nums;
            set <long long int> v;
            for(int i = 0; i < t.size(); i++){
               if(!v.count(t[i])){
                  v.insert(t[i]);
                  nums.push_back(t[i]);
               }
            }
            vector < string > ret;
            long long int curr = lower;
            int i = 0;
            int n = nums.size();
            while(curr <= upper){
               if(i < n && nums[i] == curr){
                  i++;
                  curr++;
               }
               else{
                  string temp = to_string(curr);
                  curr++;
                  if(i < n && nums[i] == curr){
                     ret.push_back(temp);
                     continue;
                  }
                  else{
                     if(i == n){
                        if(curr <= upper){
                           temp += "->";
                           temp += to_string(upper);
                           curr = (long long int )upper + 1;
                        }
                        ret.push_back(temp);
                     }
                     else{
                        temp += "->";
                        curr = nums[i];
                        temp += to_string(curr - 1);
                        curr = nums[i];
                        ret.push_back(temp);
                     }
                  }
               }
            }
            return ret;
         }
      };
      main(){
         Solution ob;
         vector<int< v = {0,1,3,50,75};
         print_vector(ob.findMissingRanges(v, 0, 99));
      }

      输入项

      {0,1,3,50,75}, 0, 99

      输出结果

      [2, 4->49, 51->74, 76->99, ]