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.set = set(range(maxNumbers))
self.max = maxNumbers
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
"""
return self.set.pop() if self.set else -1
def check(self, number):
"""
Check if a number is available or not.
:type number: int
:rtype: bool
"""
return number in self.set
def release(self, number):
"""
Recycle or release a number.
:type number: int
:rtype: void
"""
self.set.add(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)
public class PhoneDirectory {
/** Initialize your data structure here
@param maxNumbers - The maximum numbers that can be stored in the phone directory. */
private HashSet<Integer> set;
public PhoneDirectory(int maxNumbers) {
set = new HashSet<Integer>();
for(int i = 0; i < maxNumbers; i++) {
set.add(i);
}
}
/** Provide a number which is not assigned to anyone.
@return - Return an available number. Return -1 if none is available. */
public int get() {
Iterator<Integer> ite = set.iterator();
int res;
res = ite.hasNext() ? ite.next() : -1;
set.remove(res);
return res;
}
/** 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) {
set.add(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);
*/
public class PhoneDirectory {
BitSet bitset;
int max; // max limit allowed
int smallestFreeIndex; // current smallest index of the free bit
public PhoneDirectory(int maxNumbers) {
this.bitset = new BitSet(maxNumbers);
this.max = maxNumbers;
}
public int get() {
// handle bitset fully allocated
if(smallestFreeIndex == max) {
return -1;
}
int num = smallestFreeIndex;
bitset.set(smallestFreeIndex);
//Only scan for the next free bit, from the previously known smallest free index
smallestFreeIndex = bitset.nextClearBit(smallestFreeIndex);
return num;
}
public boolean check(int number) {
return bitset.get(number) == false;
}
public void release(int number) {
//handle release of unallocated ones
if(bitset.get(number) == false)
return;
bitset.clear(number);
if(number < smallestFreeIndex) {
smallestFreeIndex = number;
}
}
}