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)
Java
class PhoneDirectory {
int max;
HashSet<Integer> set;
Queue<Integer> queue;
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;
}
public int get() {
if(queue.isEmpty())
return -1;
int e = queue.poll();
set.add(e);
return e;
}
public boolean check(int number) {
return !set.contains(number) && number <= max;
}
public void release(int number) {
if(set.contains(number)){
set.remove(number);
queue.offer(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()
删除元素