设计一个电话目录管理系统,让它支持以下功能:
示例:
// 初始化电话目录,包括 3 个电话号码:0,1 和 2。
PhoneDirectory directory = new PhoneDirectory(3);
// 可以返回任意未分配的号码,这里我们假设它返回 0。
directory.get();
// 假设,函数返回 1。
directory.get();
// 号码 2 未分配,所以返回为 true。
directory.check(2);
// 返回 2,分配后,只剩一个号码未被分配。
directory.get();
// 此时,号码 2 已经被分配,所以返回 false。
directory.check(2);
// 释放号码 2,将该号码变回未分配状态。
directory.release(2);
// 号码 2 现在是未分配状态,所以返回 true。
directory.check(2);
提示:
1 <= maxNumbers <= 10^4
0 <= number < maxNumbers
调用方法的总数处于区间 [0 - 20000] 之内
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/design-phone-directory 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class PhoneDirectory {
unordered_set<int> unused, used;
int tel;
public:
/** Initialize your data structure here
@param maxNumbers - The maximum numbers that can be stored in the phone directory. */
PhoneDirectory(int maxNumbers) {
for(int i = 0; i < maxNumbers; ++i)
unused.insert(i);
}
/** Provide a number which is not assigned to anyone.
@return - Return an available number. Return -1 if none is available. */
int get() {
if(unused.empty()) return -1;
tel = *unused.begin();
unused.erase(*unused.begin());
used.insert(tel);
return tel;
}
/** Check if a number is available or not. */
bool check(int number) {
return unused.find(number) != unused.end();//没有用过
}
/** Recycle or release a number. */
void release(int number) {
used.erase(number);
unused.insert(number);
}
};
104 ms 23.3 MB