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, ]