Giả sử chúng ta muốn thiết kế Danh bạ điện thoại hỗ trợ các hoạt động sau -
-
get - Điều này sẽ cung cấp một số không được chỉ định cho bất kỳ ai.
-
kiểm tra - Điều này sẽ kiểm tra xem một số có sẵn hay không.
-
phát hành - Điều này sẽ tái chế hoặc giải phóng một số.
Sử dụng trình khởi tạo, chúng ta có thể khởi tạo n số đầu tiên
Để 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 bộ s
-
Xác định một hàng đợi có sẵn
-
Trình khởi tạo sẽ lấy maxNumbers.
-
N:=maxNumbers
-
để khởi tạo i:=0, khi i
-
chèn tôi vào có sẵn
-
-
Định nghĩa một hàm get ()
-
nếu kích thước có sẵn bằng 0, thì -
-
trả về -1
-
-
x:=phần tử đầu tiên có sẵn
-
chèn x vào s
-
xóa phần tử khỏi có sẵn
-
trả lại x
-
Xác định một kiểm tra hàm (), điều này sẽ lấy số,
-
nếu số> =N hoặc số <0, thì -
-
trả về false
-
-
trả về số true không có trong s
-
Xác định một bản phát hành hàm (), điều này sẽ lấy số,
-
nếu kiểm tra (số), thì -
-
trở lại
-
-
x:=số
-
xóa x khỏi s
-
chèn x vào có sẵn
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;
class PhoneDirectory {
public:
set<int< s;
queue<int< available;
int N;
PhoneDirectory(int maxNumbers){
N = maxNumbers;
for (int i = 0; i < N; i++) {
available.push(i);
}
}
int get(){
if (available.size() == 0)
return -1;
int x = available.front();
s.insert(x);
available.pop();
return x;
}
bool check(int number){
if (number >= N || number < 0)
return false;
return s.find(number) == s.end();
}
void release(int number){
if (check(number))
return;
int x = number;
s.erase(x);
available.push(x);
}
};
main(){
PhoneDirectory ob(3);
cout << (ob.get()) << endl;
cout << (ob.get()) << endl;
cout << (ob.check(2)) << endl;
cout << (ob.get()) << endl;
cout << (ob.check(2)) << endl;
ob.release(2);
cout << (ob.check(2)) << endl;
} Đầu vào
ob.get(); ob.get(); ob.check(2); ob.get(); ob.check(2); ob.release(2); ob.check(2);
Đầu ra
0 1 1 2 0 1