list里面存值
hashmap里面存值key和对应在数组上的位置value
注意:删除操作中,要删除的值和末尾的值之间,不是交换,而是直接用末尾值覆盖那个要删除的值,然后再删除末尾的值
class RandomizedSet {
List<Integer> list;
HashMap<Integer,Integer> valToIndex;
Random random;
public RandomizedSet() {
list = new ArrayList<>();
valToIndex = new HashMap<>();
random = new Random();
}
public boolean insert(int val) {
if(valToIndex.containsKey(val)){
return false;
}
list.add(val);
valToIndex.put(val,(list.size()-1));
return true;
}
public boolean remove(int val) {
if(!valToIndex.containsKey(val)){
return false;
}
int Index = valToIndex.get(val);
int last = list.get(list.size()-1);
list.set(Index,last);
list.remove(list.size()-1);
valToIndex.put(last,Index);
valToIndex.remove(val);
return true;
}
public int getRandom() {
return list.get(random.nextInt(list.size()));
}
}