Computer >> Máy Tính >  >> Lập trình >> C ++

Thiếu phạm vi trong C ++

Giả sử chúng ta có một nums mảng số nguyên đã được sắp xếp, phạm vi của các phần tử nằm trong phạm vi bao gồm [dưới, trên], chúng tôi phải tìm các phạm vi còn thiếu.

Vì vậy, nếu đầu vào giống như nums =[0, 1, 3, 50, 75] và giá trị thấp hơn là 0 và giá trị trên là 99, thì đầu ra sẽ là ["2", "4 -> 49", " 51-> 74 "," 76-> 99 "]

Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -

  • Xác định một số mảng

  • Xác định một bộ v

  • để khởi tạo i:=0, khi i

    • nếu t [i] không có trong v, thì -

      • chèn t [i] vào v

      • chèn t [i] vào cuối nums

  • xác định một mảng được gọi là ret

  • curr:=thấp hơn

  • i:=0, n:=kích thước của nums

  • trong khi curr <=upper, do -

    • nếu i

      • (tăng tôi lên 1)

      • (tăng độ cong lên 1)

    • Nếu không

      • temp:=chuyển curr thành chuỗi

      • (tăng độ cong lên 1)

      • nếu i

        • chèn tạm thời vào cuối ret

        • Bỏ qua phần sau, chuyển sang phần tiếp theo

      • Nếu không

        • nếu tôi giống n, thì -

          • nếu curr <=upper, thì -

            • tạm thời:="->"

            • temp:=temp nối trên dưới dạng chuỗi

            • curr:=upper + 1

          • chèn tạm thời vào cuối ret

        • Nếu không

          • tạm thời:="->"

          • curr:=nums [i]

          • temp:=temp concatenate (curr - 1) as string

          • curr:=nums [i]

          • chèn tạm thời vào cuối ret

  • trả lại ret

Ví dụ

Hãy cùng chúng tôi xem cách triển khai sau để hiểu rõ hơn -

#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));
}

Đầu vào

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

Đầu ra

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