文章目录
- 1. 题目
- 2. 解题
1. 题目
设计一个电话目录管理系统,让它支持以下功能:
- get: 分配给用户一个未被使用的电话号码,获取失败请返回 -1
- check: 检查指定的电话号码是否被使用
- release: 释放掉一个电话号码,使其能够重新被分配
示例:
// 初始化电话目录,包括 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
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
- 两个哈希set,一个存储没有使用的,一个存储使用过的,来回传递号码
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
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!