题里没说get的时候应该随机选取还是,选取least available number,题里似乎是后者,就按后者做。
用SET来判断是否被占用,STACK保存可用的号码,好像就是这样,用QUEUE也试了一下,比STACK慢,不知道为什么,估计跟具体的CASE有关吧。。
public class PhoneDirectory {
/** Initialize your data structure here
@param maxNumbers - The maximum numbers that can be stored in the phone directory. */
Set<Integer> set;
Stack<Integer> stk;
int max;
int cur = 0;
public PhoneDirectory(int maxNumbers)
{
max = maxNumbers;
set = new HashSet<Integer>();
stk = new Stack<Integer>();
for(int i =0; i < max;i++) stk.push(i);
}
/** Provide a number which is not assigned to anyone.
@return - Return an available number. Return -1 if none is available. */
public int get()
{
if(stk.isEmpty()) return -1;
set.add(stk.peek());
return stk.pop();
}
/** Check if a number is available or not. */
public boolean check(int number) {
return !set.contains(number);
}
/** Recycle or release a number. */
public void release(int number)
{
if(set.contains(number))
{
stk.push(number);
set.remove(number);
}
}
}
/**
* Your PhoneDirectory object will be instantiated and called as such:
* PhoneDirectory obj = new PhoneDirectory(maxNumbers);
* int param_1 = obj.get();
* boolean param_2 = obj.check(number);
* obj.release(number);
*/