两张哈希表

- 有重复的不重复加

- 因为有remove行为,那么map里的index就可能会不连续,出现很多洞,那么我getRandom的时候就麻烦了,所以比如用户想remove掉15

我拿24去填15的洞, 并且继承15的index,(我拿最后一条记录去填洞,可以保证每次index都连续)
class RandomizedSet {private HashMap<Integer, Integer> keyIndexMap;private HashMap<Integer, Integer> indexKeyMap;private int size;public RandomizedSet() {keyIndexMap = new HashMap<>();indexKeyMap = new HashMap<>();size = 0;}public boolean insert(int val) {if (!keyIndexMap.containsKey(val)) {keyIndexMap.put(val, size);indexKeyMap.put(size++, val);return true;}return false;}public boolean remove(int val) {if (keyIndexMap.containsKey(val)) {int deleteIndex = keyIndexMap.get(val);int lastIndex = --size;int lastKey = indexKeyMap.get(lastIndex);keyIndexMap.put(lastKey, deleteIndex);indexKeyMap.put(deleteIndex, lastKey);keyIndexMap.remove(val);indexKeyMap.remove(lastIndex);return true;}return false;}public int getRandom() {if (size == 0) {return -1;}int randomIndex = (int) (Math.random() * size);return indexKeyMap.get(randomIndex);}}
