LeetCode 380: O(1) 时间插入、删除和获取随机元素
摘要
这道题要求设计一个数据结构,能够支持 O(1) 时间复杂度的插入、删除和随机获取操作。如果只用数组,删除操作是 O(n);如果只用 Set,随机获取操作是 O(n)。我们需要巧妙地结合数组和字典,才能让所有操作都达到 O(1) 的时间复杂度。
描述
题目要求实现 RandomizedSet 类,需要支持以下操作:
**RandomizedSet()**:初始化RandomizedSet对象**bool insert(int val)**:当元素val不存在时,向集合中插入该项,并返回true;否则,返回false**bool remove(int val)**:当元素val存在时,从集合中移除该项,并返回true;否则,返回false**int getRandom()**:随机返回现有集合中的一项(测试用例保证调用此方法时集合中至少存在一个元素)。每个元素应该有相同的概率被返回
你必须实现类的所有函数,并满足每个函数的平均时间复杂度为 O(1)。
示例:
输入 ["RandomizedSet", "insert", "remove", "insert", "getRandom", "remove", "insert", "getRandom"] [[], [1], [2], [2], [], [1], [2], []]
输出 [null, true, false, true, 2, true, false, 2]
解释 RandomizedSet randomizedSet = new RandomizedSet();
randomizedSet.insert(1); // 向集合中插入 1。返回 true 表示 1 被成功地插入。
randomizedSet.remove(2); // 返回 false,表示集合中不存在 2。
randomizedSet.insert(2); // 向集合中插入 2。返回 true。集合现在包含 [1,2]。
randomizedSet.getRandom();
randomizedSet();
randomizedSet();
randomizedSet();


