题目地址:
https://leetcode.com/problems/design-phone-directory/
设计一个电话目录管理系统,可以实现下面操作:
1、返回一个未使用过的电话号码;
2、判断一个电话号码是否被使用过;
3、将一个使用过的电话号码设为未使用。
可以用BitSet来做。代码如下:
import java.util.BitSet;
public class PhoneDirectory {
private BitSet bitSet;
private int maxNum;
/**
* Initialize your data structure here
*
* @param maxNumbers - The maximum numbers that can be stored in the phone directory.
*/
public PhoneDirectory(int maxNumbers) {
bitSet = new BitSet(maxNumbers);
maxNum = maxNumbers;
}
/**
* Provide a number which is not assigned to anyone.
*
* @return - Return an available number. Return -1 if none is available.
*/
public int get() {
// 找从0开始第一个值为false的下标
int idx = bitSet.nextClearBit(0);
bitSet.set(idx);
// 找到了,则返回下标,否则返回-1
if (idx < maxNum) {
return idx;
} else {
return -1;
}
}
/**
* Check if a number is available or not.
*/
public boolean check(int number) {
return !bitSet.get(number);
}
/**
* Recycle or release a number.
*/
public void release(int number) {
// 将number设为false,标记为未使用
bitSet.clear(number);
}
}
get时间复杂度 O ( n ) O(n) O(n),其余 O ( 1 ) O(1) O(1),空间 O ( n ) O(n) O(n)。