【题目】
设计一种数据结构
void insert(key): 将key加入到该结构,并且不能重复插入;
void delete(key): 将原本在数据结构中的key移除;
key getRandom(): 等概率返回数据结构中的一个key;
【要求】
insert,delete和getRandom方法的复杂度都是O(1);
【代码如下】
import java.util.HashMap;
public class RandomPool<Key>{
private HashMap<Key , Integer> keyIndexMap ;
private HashMap<Integer , Key> indexKeyMap ;
private int size ;
public RandomPool(){
keyIndexMap = new HashMap<>() ;
indexKeyMap = new HashMap<>() ;
}
public void insert(Key key){
keyIndexMap.put(key , size) ;
indexKeyMap.put(size++ , key) ;
}
public void delete(Key key){
if (!keyIndexMap.containsKey(key)){
return ;
}
int lastIndex = --this.size ;
int deleteIndex = keyIndexMap.get(key) ;
Key lastKey = indexKeyMap.get(this.size) ;
keyIndexMap.put(lastKey , deleteIndex) ;
indexKeyMap.put(deleteIndex , lastKey) ;
keyIndexMap.remove(lastKey) ;
}
public Key getRandom(){
if (this.size == 0){
return null ;
}
int index = (int) (Math.random()*this.size);
return indexKeyMap.get(index) ;
}
}