leetcode之Insert Delete GetRandom O(1) 问题
2017-07-25 20:40
316 查看
问题描述:
Design a data structure that supports all following operations in
average O(1) time.
示例:
Example:
// Init an empty set.
RandomizedSet randomSet = new RandomizedSet();
// Inserts 1 to the set. Returns true as 1 was inserted successfully.
randomSet.insert(1);
// Returns false as 2 does not exist in the set.
randomSet.remove(2);
// Inserts 2 to the set, returns true. Set now contains [1,2].
randomSet.insert(2);
// getRandom should return either 1 or 2 randomly.
randomSet.getRandom();
// Removes 1 from the set, returns true. Set now contains [2].
randomSet.remove(1);
// 2 was already in the set, so return false.
randomSet.insert(2);
// Since 2 is the only number in the set, getRandom always return 2.
randomSet.getRandom();
题目来源:Insert Delete GetRandom O(1) (详细地址:https://leetcode.com/problems/insert-delete-getrandom-o1/#/description)
思路:三个函数所要完成的操作分别为:插入一个数,删除一个数,取出任意一个数。要求这三个操作都在O(1)的时间内完成,其实很容易就想到了可以采用ArrayList和HashMap来完成这三个操作。为什么呢?我们利用map来保存数组的每个数字的索引,然后list就用来存储具体的每个数。不过在这的删除函数(即remove函数)比较有意思,采用了覆盖的方法,不是直接在list中删除,因为直接在list中删除指定数字的话,后面的数还要往前移动,所以我们就把要删除的数直接移动到最后的索引上去,这样删除就可以避免为O(n)了。
代码:
生成ArrayList和HashMap:
![](https://img-blog.csdn.net/20170725203546447?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHUyNjQ1MzE4NDAw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
插入函数:
![](https://img-blog.csdn.net/20170725203751878?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHUyNjQ1MzE4NDAw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
删除函数:
![](https://img-blog.csdn.net/20170725203829298?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveHUyNjQ1MzE4NDAw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
获取任意一个元素:
Design a data structure that supports all following operations in
average O(1) time.
insert(val): Inserts an item val to the set if not already present.
remove(val):Removes an item val from the set if present.
getRandom: Returns a random element from current set of elements. Each element must have the same probability of being returned.
示例:
Example:
// Init an empty set.
RandomizedSet randomSet = new RandomizedSet();
// Inserts 1 to the set. Returns true as 1 was inserted successfully.
randomSet.insert(1);
// Returns false as 2 does not exist in the set.
randomSet.remove(2);
// Inserts 2 to the set, returns true. Set now contains [1,2].
randomSet.insert(2);
// getRandom should return either 1 or 2 randomly.
randomSet.getRandom();
// Removes 1 from the set, returns true. Set now contains [2].
randomSet.remove(1);
// 2 was already in the set, so return false.
randomSet.insert(2);
// Since 2 is the only number in the set, getRandom always return 2.
randomSet.getRandom();
题目来源:Insert Delete GetRandom O(1) (详细地址:https://leetcode.com/problems/insert-delete-getrandom-o1/#/description)
思路:三个函数所要完成的操作分别为:插入一个数,删除一个数,取出任意一个数。要求这三个操作都在O(1)的时间内完成,其实很容易就想到了可以采用ArrayList和HashMap来完成这三个操作。为什么呢?我们利用map来保存数组的每个数字的索引,然后list就用来存储具体的每个数。不过在这的删除函数(即remove函数)比较有意思,采用了覆盖的方法,不是直接在list中删除,因为直接在list中删除指定数字的话,后面的数还要往前移动,所以我们就把要删除的数直接移动到最后的索引上去,这样删除就可以避免为O(n)了。
代码:
生成ArrayList和HashMap:
插入函数:
删除函数:
获取任意一个元素:
相关文章推荐
- LeetCode-Insert Delete GetRandom O(1) - Duplicates allowed
- LeetCode:381 Insert Delete GetRandom O(1)
- Leetcode: Insert Delete GetRandom O(1) - Duplicates allowed
- Leetcode:Insert Delete GetRandom O(1)
- 【LeetCode】Insert Delete GetRandom O(1) 系列
- [LeetCode] Insert Delete GetRandom O(1) - Duplicates allowed 常数时间内插入删除和获得随机数 - 允许重复
- LeetCode Insert Delete GetRandom O(1) - Duplicates allowed
- [LeetCode] Insert Delete GetRandom O(1)
- LeetCode刷题【Array】 Insert Delete GetRandom O(1)
- Leetcode 之 Insert Delete GetRandom O(1)
- leetcode之 Insert Delete GetRandom O(1)
- 【Leetcode】Insert Delete GetRandom O(1)
- LeetCode Insert Delete GetRandom O(1) - Duplicates allowed
- [LeetCode] Insert Delete GetRandom O(1) - Duplicates allowed
- Leetcode 380 Insert Delete GetRandom O(1)
- LeetCode Insert Delete GetRandom O(1)
- LeetCode 380: Insert Delete GetRandom O(1)
- LeetCode Insert Delete GetRandom O(1)
- LeetCode 381---Insert Delete GetRandom O(1) - Duplicates allowed
- 【leetcode】Insert Delete GetRandom O(1)