πDesign Phone Directory
Problem
Understanding of problem
Proposed solutions
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;
}
}
}Solution
Last updated

