假设我们要设计一个支持以下操作的电话目录-
get-这将提供未分配给任何人的号码。
检查-这将检查号码是否可用。
发布-这将回收或发布号码。
使用初始化程序,我们可以首先初始化n个数字
为了解决这个问题,我们将遵循以下步骤-
定义一组
定义一个队列
初始化程序将使用maxNumbers。
N:= maxNumbers
对于初始化i:= 0,当i <N时,更新(将i增加1),执行-
将我插入可用
定义功能 get()
如果可用大小等于0,则-
返回-1
x:=可用的第一个元素
将x插入s
从可用中删除元素
返回x
定义一个函数check()
,它将取数字,
如果数字> = N或数字<0,则-
返回假
返回真数字不在s中
定义一个函数release()
,它将取数字,
如果check(number),则-
返回
x:=数字
从s中删除x
将x插入可用
让我们看下面的实现以更好地理解-
#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; }
ob.get(); ob.get(); ob.check(2); ob.get(); ob.check(2); ob.release(2); ob.check(2);
输出结果
0 1 1 2 0 1