题解
使用map里完成 0(1)时间元素是否在set
代码
// 299 t380-0103 O(1) 时间插入、删除和获取随机元素
class RandomizedSet {
private HashMap<Integer,Integer> map;
private ArrayList<Integer> list;
public RandomizedSet() {
this.map=new HashMap<>();
this.list=new ArrayList<>();
}
public boolean insert(int val) {
if (map.containsKey(val)){
return false;
}
// 不包含时
int index=list.size();
list.add(val);
map.put(val,index);
return true;
}
public boolean remove(int val) {
if (!map.containsKey(val)){
return false;
}
// 包含时 变成数组中将该元素替换为最后一个位置的元素
int lastIndex=list.size()-1;
int removeIndex=map.get(val);
list.set(removeIndex,list.get(lastIndex));
map.put(list.get(lastIndex), removeIndex);
list.remove(lastIndex);
map.remove(val);
return true;
}
public int getRandom() {
Random random=new Random();
int i = random.nextInt(list.size());
return list.get(i);
}
}