LeetCode 379. 电话目录管理系统(哈希set)

    技术2025-12-12  24

    文章目录

    1. 题目2. 解题

    1. 题目

    设计一个电话目录管理系统,让它支持以下功能:

    get: 分配给用户一个未被使用的电话号码,获取失败请返回 -1check: 检查指定的电话号码是否被使用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


    我的博客地址 https://michael.blog.csdn.net/

    长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!

    Processed: 0.021, SQL: 9