yokostan / Leetcode-Solutions

Doing exercise on Leetcode. Carry on!
0 stars 3 forks source link

Leetcode #379. Design Phone Directory #289

Open yokostan opened 5 years ago

yokostan commented 5 years ago
class PhoneDirectory {
    Stack<Integer> stack;
    boolean[] set;
    /** Initialize your data structure here
        @param maxNumbers - The maximum numbers that can be stored in the phone directory. */
    public PhoneDirectory(int maxNumbers) {
        stack = new Stack<>();
        set = new boolean[maxNumbers];
        Arrays.fill(set, false);
        int i = maxNumbers - 1;
        while (maxNumbers-- > 0) {
            stack.add(i);
            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 (stack.isEmpty()) return -1;
        int res = stack.pop();
        set[res] = true;
        return res;
    }

    /** Check if a number is available or not. */
    public boolean check(int number) {
        return !set[number];
    }

    /** Recycle or release a number. */
    public void release(int number) {
        if (set[number]) {
            set[number] = false;
            stack.push(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);
 */