LeetCode Insert Delete GetRandom O(1)
2016-10-08 12:41
369 查看
题意:设计一个数据结构,支持添加、删除,随机获取操作,时间复杂度为O(1)
思路:因为元素不重复,在添加操作时,可以使用hashset和arraylist来做,其中hashset中的key表示添加的元素,而 val表示hashset的大小。
在删除操作时,如果删除的元素位置不是size-1,则将其位置与size-1位置的元素交换,同时在arraylist中删除最后一个元素,并且更新hashset的val
具体代码如下:
思路:因为元素不重复,在添加操作时,可以使用hashset和arraylist来做,其中hashset中的key表示添加的元素,而 val表示hashset的大小。
在删除操作时,如果删除的元素位置不是size-1,则将其位置与size-1位置的元素交换,同时在arraylist中删除最后一个元素,并且更新hashset的val
具体代码如下:
public class RandomizedSet { private Map<Integer, Integer> hm; private List<Integer> list; private Random random; public RandomizedSet() { hm = new HashMap<>(); list = new ArrayList<>(); random = new Random(); } /** Inserts a value to the set. Returns true if the set did not already contain the specified element. */ public boolean insert(int val) { if (hm.containsKey(val)) return false; int size = hm.size(); hm.put(val, size); list.add(val); return true; } /** Removes a value from the set. Returns true if the set contained the specified element. */ public boolean remove(int val) { if (!hm.containsKey(val)) return false; int size = hm.size(); int index = hm.get(val); if (index != size - 1) { int tmp = list.get(index); list.set(index, list.get(size - 1)); list.set(size - 1, tmp); } list.remove(size - 1); if (index != size - 1) hm.put(list.get(index), index); hm.remove(val); return true; } /** Get a random element from the set. */ public int getRandom() { return list.get(random.nextInt(list.size())); } }
相关文章推荐
- Leetcode: Insert Delete GetRandom O(1) - Duplicates allowed
- LeetCode 380: Insert Delete GetRandom O(1)
- Leetcode 380 Insert Delete GetRandom O(1)
- LeetCode:381 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之Insert Delete GetRandom O(1) - Duplicates allowed
- LeetCode 381---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] 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)