381. Insert Delete GetRandom O(1)
来源:互联网 发布:许昌自学考试网络报名 编辑:程序博客网 时间:2024/06/06 12:45
Design a data structure that supports all following operations in average O(1) time.
Note: Duplicate elements are allowed.insert(val)
: Inserts an item val to the collection.remove(val)
: Removes an item val from the collection if present.getRandom
: Returns a random element from current collection of elements. The probability of each element being returned is linearly related to the number of same value the collection contains.
Example:
// Init an empty collection.RandomizedCollection collection = new RandomizedCollection();// Inserts 1 to the collection. Returns true as the collection did not contain 1.collection.insert(1);// Inserts another 1 to the collection. Returns false as the collection contained 1. Collection now contains [1,1].collection.insert(1);// Inserts 2 to the collection, returns true. Collection now contains [1,1,2].collection.insert(2);// getRandom should return 1 with the probability 2/3, and returns 2 with the probability 1/3.collection.getRandom();// Removes 1 from the collection, returns true. Collection now contains [1,2].collection.remove(1);// getRandom should return 1 and 2 both equally likely.collection.getRandom();较之于380. Insert Delete GetRandom O(1)允许重复添加数,代码上稍微有一点变化,代码如下:
public class RandomizedCollection { ArrayList<Integer> nums; HashMap<Integer, Set<Integer>> map; java.util.Random rand = new java.util.Random(); /** Initialize your data structure here. */ public RandomizedCollection() { nums = new ArrayList<Integer>(); map = new HashMap<Integer, Set<Integer>>(); } /** Inserts a value to the collection. Returns true if the collection did not already contain the specified element. */ public boolean insert(int val) { boolean contain = map.containsKey(val); if (!contain) { map.put(val, new HashSet<Integer>()); } map.get(val).add(nums.size()); nums.add(val); return !contain; } /** Removes a value from the collection. Returns true if the collection contained the specified element. */ public boolean remove(int val) { boolean contain = map.containsKey(val); if (!contain) { return false; } int loc = map.get(val).iterator().next(); map.get(val).remove(loc); if (loc < nums.size() - 1) { int lastone = nums.get(nums.size() - 1); map.get(lastone).remove(nums.size() - 1); map.get(lastone).add(loc); nums.set(loc, lastone); } nums.remove(nums.size() - 1); if (map.get(val).isEmpty()) { map.remove(val); } return true; } /** Get a random element from the collection. */ public int getRandom() { return nums.get(rand.nextInt(nums.size())); }}/** * Your RandomizedCollection object will be instantiated and called as such: * RandomizedCollection obj = new RandomizedCollection(); * boolean param_1 = obj.insert(val); * boolean param_2 = obj.remove(val); * int param_3 = obj.getRandom(); */
0 0
- 381. Insert Delete GetRandom O(1)
- 381. Insert Delete GetRandom O(1)
- 381. Insert Delete GetRandom O(1)
- 381. Insert Delete GetRandom O(1)
- leetcode 381. Insert Delete GetRandom O(1)
- leetcode 381. Insert Delete GetRandom O(1)
- [Leetcode] 381. Insert Delete GetRandom O(1)
- [leetcode]381. Insert Delete GetRandom O(1)
- leetcode 381. Insert Delete GetRandom O(1)
- Insert Delete GetRandom O(1)
- Insert Delete GetRandom O(1)
- Insert Delete GetRandom O(1)
- Insert Delete GetRandom O(1)
- Insert Delete GetRandom O(1)
- Insert Delete GetRandom O(1)
- LeetCode—381. Insert Delete GetRandom O(1) - Duplicates allowed
- [leetcode] 381. Insert Delete GetRandom O(1) - Duplicates allowed
- 381. Insert Delete GetRandom O(1) - Duplicates allowed
- aria2下载输出信息样本搜集
- 简单聊聊网页的资源加载优化
- zabbix3.0.4报错Get value from agent failed: cannot connect to [[1.1.1.1]:10050]: [4] Interrupted syste
- 简析BlockingQueue
- (亲测可用)MarkdownPad安装及激活
- 381. Insert Delete GetRandom O(1)
- Linux上搭建BOA服务器
- PHP-简单验证码类
- Sql distinct和group by的区别
- 网络IO之阻塞、非阻塞、同步、异步总结
- Java Http连接池封装
- Failure to transfer org.apache.maven.plugins:maven-surefire-plugin:pom:2.12.4
- 机器学习-4 多特征 Multiple Features
- 数学——欧拉-拉格朗日方程