LeetCodev379. Design Phone Directory
来源:互联网 发布:简单邮件传输协议端口 编辑:程序博客网 时间:2024/05/29 09:14
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);
s思路:
1. 设计题,最开始想到可以用unordered_set
2. 参考http://www.cnblogs.com/grandyang/p/5735205.html 不用set或queue或stack,都会TLE。这种情况下,说明可以直接用vector来模拟这些复杂的数据结构,两个vector,一个放回收的数据,方便o(1)取数据;一个放数据是否存在pool的flag,方便o(1)查询是否存在!!!不得不说很高级很简洁啊!
//方法1:用unordered_set来做,所有操作o(1)。最大的问题是constructor需要o(n)的时间,但是每次get的时候,又是依次输出,所以完全可以用一个递增的变量代替目前get那个位置了,而不用傻头傻脑的把如此规则的数先存起来再取,时间太慢!!!class PhoneDirectory {public: /** Initialize your data structure here @param maxNumbers - The maximum numbers that can be stored in the phone directory. */ PhoneDirectory(int maxNumbers) { maxNum=maxNumbers; for(int i=0;i<maxNum;i++) ss.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(ss.size()>0){ int cur=*ss.begin(); ss.erase(cur); return cur; } return -1; } /** Check if a number is available or not. */ bool check(int number) { if(number>=0&&number<maxNum&&ss.count(number)) return true; return false; } /** Recycle or release a number. */ void release(int number) { if(number>=0&&number<maxNum) ss.insert(number); }private: unordered_set<int> ss; int maxNum;};//方法2:用一个变量next来保存取的数据,把release的数据放在一个新的vector或queue内,然后用一个vector<bool>做标记,表名某一个值在pool内。class PhoneDirectory {public: /** Initialize your data structure here @param maxNumbers - The maximum numbers that can be stored in the phone directory. */ PhoneDirectory(int maxNumbers) { maxNum=maxNumbers; next=0; index=0; pool.resize(maxNum); flag.resize(maxNum,1);//初始化表明所有数都有! } /** Provide a number which is not assigned to anyone. @return - Return an available number. Return -1 if none is available. */ int get() { if(next==maxNum&&index<=0) return -1; if(index>0){ int cur=pool[--index]; flag[cur]=0; return cur; } if(next<maxNum){ flag[next]=0; return next++; } } /** Check if a number is available or not. */ bool check(int number) { if(number>=0&&number<maxNum&&flag[number]) return true; return false; //以上三句可以浓缩成一句: return (number>=0&&number<maxNum&&flag[number]); } /** Recycle or release a number. */ void release(int number) { if(number>=0&&number<maxNum&&flag[number]==0){ pool[index++]=number; flag[number]=1; } }private: vector<int> pool; vector<bool> flag; int maxNum; int next,index;};
- LeetCodev379. Design Phone Directory
- Design Phone Directory
- 379. Design Phone Directory
- Leetcode 379. Design Phone Directory
- [leetcode] 379. Design Phone Directory 解题报告
- [Leetcode] 379. Design Phone Directory 解题报告
- Design.Devices.Phone&Tablet
- Design the website project directory
- Windows 2000 Design Directory Service 70-219 exam
- phone
- Directory
- The Symbian OS Architecture Sourcebook: Design and Evolution of a Mobile Phone OS
- design
- design
- design
- Design
- design
- Design?Design!
- PHP中require和include路径问题详解
- 【git系列之D】如何恢复windows系统下git的状态图标显示
- android 内存泄露诊断
- 底部按钮和应用图标显示未读消息
- 三维建模
- LeetCodev379. Design Phone Directory
- 记录一下python log类的使用 做个记录 慢慢积累
- 【转载】架构师一席谈(一) 为什么要在服务层设计读写分离
- 技多不压身,语言越多越好?
- CMD命令操作orcle数据库 查看80进程
- 安装svn插件集成myeclipse2014的两种方式
- 微信小程序新手入门
- 董
- 程序员该用哪种姿势来理财