381. Insert Delete GetRandom O - Duplicates allowed
Posted tobeabetterpig
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了381. Insert Delete GetRandom O - Duplicates allowed相关的知识,希望对你有一定的参考价值。
381. Insert Delete GetRandom O(1) - Duplicates allowed https://www.youtube.com/watch?v=mRTgft9sBhA 这个自己写写,花花讲的思路还行 https://zxi.mytechroad.com/blog/hashtable/leetcode-381-insert-delete-getrandom-o1-duplicates-allowed/ 没通过 class RandomizedCollection { /** Initialize your data structure here. */ class Entry{ public int value; public int index; public Entry(int val, int idx){ value = val; index = idx; } } private HashMap<Integer, List<Integer>> map; private List<Entry> vals; private Random rand; public RandomizedCollection() { map = new HashMap<>(); vals = new ArrayList<>(); rand = new Random(); } /** Inserts a value to the collection. Returns true if the collection did not already contain the specified element. */ public boolean insert(int val) { if(!map.containsKey(val)){ map.put(val, new ArrayList<>()); } List<Integer> list = map.get(val); list.add(vals.size()); map.put(val, list); vals.add(new Entry(val, list.size()-1)); return list.size() == 1; } /** Removes a value from the collection. Returns true if the collection contained the specified element. */ public boolean remove(int val) { if(!map.containsKey(val)) return false; // need to get the index of the removing value in the list<entry> List<Integer> list = map.get(val); int size = list.size(); int lastIndex = list.get(size -1); list.remove(size-1); if(list.size() == 0){ map.remove(val); } // get the value from the last slot in the list<entry> int listSize = vals.size(); Entry lastSlot = vals.get(listSize - 1); int lvalue = lastSlot.value; int lindex = lastSlot.index; map.get(lvalue).set(lindex,lastIndex); // swap the removing slot with the last slot vals.set(lastIndex, lastSlot); vals.remove(listSize - 1); return true; } /** Get a random element from the collection. */ public int getRandom() { return vals.get(rand.nextInt(vals.size())).value; } }
以上是关于381. Insert Delete GetRandom O - Duplicates allowed的主要内容,如果未能解决你的问题,请参考以下文章
381. Insert Delete GetRandom O - Duplicates allowed - Hard
leetcode 381.Insert Delete GetRandom
leetcode 381 Insert Delete GetRandom O - Duplicates allowed
LeetCode 381. Insert Delete GetRandom O - Duplicates allowed (插入删除和获得随机数 常数时间 允许重复项)
381 Insert Delete GetRandom O - Duplicates allowed O 时间插入删除和获取随机元素 - 允许重复