需要实现时间复杂度为O(1),则需要建立哈希表生成直接索引,
class RandomizedSet {
private ArrayList<Integer> list;
private HashMap<Integer,Integer> listMap;
private Random random;
private int listSize;
public RandomizedSet() {
list = new ArrayList<>();
listMap = new HashMap<>();
random = new Random();
listSize = 0;
}
public boolean insert(int val) {
if(!listMap.containsKey(val)) //如果哈希表内不存在val值对list索引的键值对
{
listMap.put(val,listSize); //哈希表增加键值对,即对list的索引
list.add(listSize,val);
listSize++; //list大小增加
return true;
}
return false;
}
public boolean remove(int val) {
if(listMap.containsKey(val))
{
list.set(listMap.get(val),list.get(listSize-1)); //将列表最后的元素替换移除的元素
listMap.put(list.get(listSize-1),listMap.get(val));
list.remove(listSize-1);
listMap.remove(val);
listSize--;
return true;
}
return false;
}
public int getRandom() {
return list.get(random.nextInt(list.size()));
}
}