379 Design Phone Directory

Python

import Queue
class PhoneDirectory(object):

    def __init__(self, maxNumbers):
        """
        Initialize your data structure here
        @param maxNumbers - The maximum numbers that can be stored in the phone directory.
        :type maxNumbers: int
        """
        self.max = maxNumbers - 1
        self.set = set()
        self.queue = Queue.Queue(maxNumbers)
        for i in range(maxNumbers):
            self.queue.put(i)

    def get(self):
        """
        Provide a number which is not assigned to anyone.
        @return - Return an available number. Return -1 if none is available.
        :rtype: int
        """
        if self.queue.empty():
            return -1
        i = self.queue.get()
        self.set.add(i)
        return i

    def check(self, number):
        """
        Check if a number is available or not.
        :type number: int
        :rtype: bool
        """
        return (number <= self.max) and (number not in self.set)

    def release(self, number):
        """
        Recycle or release a number.
        :type number: int
        :rtype: None
        """
        if number in self.set:
            self.set.remove(number)
            self.queue.put(number)

# Your PhoneDirectory object will be instantiated and called as such:
# obj = PhoneDirectory(maxNumbers)
# param_1 = obj.get()
# param_2 = obj.check(number)
# obj.release(number)

Java

class PhoneDirectory {
    int max;
    HashSet<Integer> set;
    Queue<Integer> queue;
    /** Initialize your data structure here
        @param maxNumbers - The maximum numbers that can be stored in the phone directory. */
    public PhoneDirectory(int maxNumbers) {
        set = new HashSet<Integer>();
        queue = new LinkedList<Integer>();
        for(int i = 0; i < maxNumbers; i ++){
            queue.offer(i);
        }
        max = maxNumbers - 1;
    }

    /** Provide a number which is not assigned to anyone.
        @return - Return an available number. Return -1 if none is available. */
    public int get() {
        if(queue.isEmpty())
            return -1;
        int e = queue.poll();
        set.add(e);
        return e;
    }

    /** Check if a number is available or not. */
    public boolean check(int number) {
        return !set.contains(number) && number <= max;
    }

    /** Recycle or release a number. */
    public void release(int number) {
        if(set.contains(number)){
            set.remove(number);
            queue.offer(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);
 */

程序总结

  • Java 实现队列Queue
    • java.util.Queue 中定义了Queue这个类接口,在java.util.LinkedList里面提供了对于这个接口的实现
    • offer(), add() : 添加元素,其中offer()在添加元素的时候,不会因为队列的长度报异常
    • poll(),remove(): 删除元素,都是删除第一个元素,但是使用poll()不会因为删除空队列报异常
    • peek(),element(): 返回头元素,在队列的头部查询元素。和remove()方法类似,使用peek()不会因为队列为空报异常, 只是返回null
    • isEmpty()判断队列是否为空
  • Java 实现set
    • java.util.Set中定义了Set接口,在java.util.HashSet里面提供了对于这个接口的实现。
    • contains() 判断元素是否存在
    • add()添加元素
    • remove() 删除元素

results matching ""

    No results matching ""