LeetCode 381---Insert Delete GetRandom O(1) - Duplicates allowed

来源:互联网 发布:js给div添加class属性 编辑:程序博客网 时间:2024/05/18 17:40

题目链接:LeetCode 381—Insert Delete GetRandom O(1) - Duplicates allowed
AC代码:

import java.util.ArrayList;import java.util.HashMap;import java.util.HashSet;import java.util.List;import java.util.Map;import java.util.Set;public class Problem381 {     List<Integer> nums;        Map<Integer, Set<Integer>> map;        java.util.Random random;        /** Initialize your data structure here. */        public Problem381() {            // TODO Auto-generated constructor stub        } {            nums = new ArrayList<>();            map = new HashMap<>();            random = new java.util.Random();        }        /** Inserts a value to the collection. Returns true if the collection did not already contain the specified element. */        public boolean insert(int val) {            boolean doesContain = map.containsKey(val);            if(!doesContain) map.put(val, new HashSet<>());            map.get(val).add(nums.size());            nums.add(val);            return !doesContain;        }        /** 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;            if(!map.get(val).contains(nums.size()-1)) {                int currPos = map.get(val).iterator().next();                int lastVal = nums.get(nums.size() - 1);                map.get(lastVal).remove(nums.size() - 1);                map.get(lastVal).add(currPos);                map.get(val).remove(currPos);                map.get(val).add(nums.size() - 1);                nums.set(currPos, lastVal);            }            map.get(val).remove(nums.size()-1);            if(map.get(val).isEmpty()) map.remove(val);            nums.remove(nums.size()-1);            return true;        }        /** Get a random element from the collection. */        public int getRandom() {            return nums.get(random.nextInt(nums.size()));        }}
0 0