// 使用数组+hashmap,O(1) 获取数据,O(1) 删除数据
// 删除的方式就是跟最后一个元素进行交换
class RandomizedSet {
private ArrayList<Integer> arr;
private HashMap<Integer, Integer> valToIndex;
public RandomizedSet() {
arr = new ArrayList<>();
valToIndex = new HashMap<>();
}
public boolean insert(int val) {
if (valToIndex.containsKey(val))
return false;
arr.add(val);
valToIndex.put(val, arr.size() - 1);
return true;
}
public boolean remove(int val) {
if (!valToIndex.containsKey(val))
return false;
int index = valToIndex.get(val);;
int tmp = arr.get(arr.size() - 1);
arr.set(arr.size() - 1, val);
arr.set(index, tmp);
valToIndex.put(tmp, index);
valToIndex.remove(val);
arr.remove(arr.size() - 1);
return true;
}
public int getRandom() {
Random rand = new Random();
return arr.get(rand.nextInt(0, arr.size()));
}
}
Leetcode 380 随机获取的数据结构
最新推荐文章于 2024-03-08 09:42:09 发布