379. Design Phone Directory

题里没说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);
 */
原文地址:https://www.cnblogs.com/reboot329/p/5951374.html