[leetcode] 379. Design Phone Directory 解题报告
来源:互联网 发布:js判断json对象和数组 编辑:程序博客网 时间:2024/05/12 13:44
题目链接: https://leetcode.com/problems/design-phone-directory/
Design a Phone Directory which supports the following operations:
get
: Provide a number which is not assigned to anyone.check
: Check if a number is available or not.release
: Recycle or release a number.
Example:
// Init a phone directory containing a total of 3 numbers: 0, 1, and 2.PhoneDirectory directory = new PhoneDirectory(3);// It can return any available phone number. Here we assume it returns 0.directory.get();// Assume it returns 1.directory.get();// The number 2 is available, so return true.directory.check(2);// It returns 2, the only number that is left.directory.get();// The number 2 is no longer available, so return false.directory.check(2);// Release number 2 back to the pool.directory.release(2);// Number 2 is available again, return true.directory.check(2);
思路: 这题的对C++时间卡的太严了, 基本上只要涉及到任何高级数据结构就会超时, 只能利用c风格的代码, 并且所有操作除初始化以外都是O(1)才可以过.
可以利用两个数组和一个当前剩余号码计数, 一个数组前n个保存当前可用的号码, 另一个数组映射每一个号码是否可用, 还有一个计数是当前第一个数组前n个是可用的.
代码如下:
class PhoneDirectory {public: /** Initialize your data structure here @param maxNumbers - The maximum numbers that can be stored in the phone directory. */ PhoneDirectory(int maxNumbers){ n = maxNumbers; available = new int[n]; isAvailable = new int[n]; for(int i = 0; i < n; i++) available[i] = i, isAvailable[i] = 1; } ~PhoneDirectory() { delete [] available; delete [] isAvailable; } /** Provide a number which is not assigned to anyone. @return - Return an available number. Return -1 if none is available. */ int get() { if(n <= 0) return -1; int ans = available[--n]; isAvailable[ans] = 0; return ans; } /** Check if a number is available or not. */ bool check(int number) { return isAvailable[number]; } /** Recycle or release a number. */ void release(int number) { if(isAvailable[number]) return; available[n++] = number; isAvailable[number] = 1; }private: int *available, *isAvailable; int n;};/** * Your PhoneDirectory object will be instantiated and called as such: * PhoneDirectory obj = new PhoneDirectory(maxNumbers); * int param_1 = obj.get(); * bool param_2 = obj.check(number); * obj.release(number); */
0 0
- [leetcode] 379. Design Phone Directory 解题报告
- [Leetcode] 379. Design Phone Directory 解题报告
- Leetcode 379. Design Phone Directory
- 379. Design Phone Directory
- Design Phone Directory
- LeetCodev379. Design Phone Directory
- [leetcode] 355. Design Twitter 解题报告
- [leetcode] 362. Design Hit Counter 解题报告
- [leetcode] 353. Design Snake Game 解题报告
- [Leetcode] 353. Design Snake Game 解题报告
- [Leetcode] 355. Design Twitter 解题报告
- [Leetcode] 362. Design Hit Counter 解题报告
- LeetCode解题报告--Letter Combinations of a Phone Number
- [leetcode] 17. Letter Combinations of a Phone Number 解题报告
- [LeetCode] Letter Combinations of a Phone Number 解题报告
- [Leetcode] 17. Letter Combinations of a Phone Number 解题报告
- [LeetCode] Letter Combinations of a Phone Number 解题报告
- Letter Combinations of a Phone Number --leetcode解题报告
- 4-5 链式表操作集 (20分)
- 第13章 文件读写的相关要点记录--二进制与文本文件
- Data Quality Services
- NYOJ 1058.部分和问题(深搜)
- dialog_sneakbar_toas
- [leetcode] 379. Design Phone Directory 解题报告
- 集成科大讯飞TTS【离线语音合成服务】
- 数组总结之补充
- PS2 格兰蒂亚3 汉化研究
- LeetCode 100. Same Tree
- 冒泡排序及二分查找
- 将一个数组赋值给另外一个数组
- MPU6050
- 清晰解题: 网易编程地牢逃脱