1
0
mirror of https://gitee.com/coder-xiaomo/leetcode-problemset synced 2025-01-11 02:58:13 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
leetcode-problemset/leetcode-cn/problem (Chinese)/O(1) 时间插入、删除和获取随机元素 - 允许重复 [insert-delete-getrandom-o1-duplicates-allowed].html
2022-03-29 12:43:11 +08:00

46 lines
2.7 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<p><code>RandomizedCollection</code> 是一种包含数字集合(可能是重复的)的数据结构。它应该支持插入和删除特定元素,以及删除随机元素。</p>
<p>实现 <code>RandomizedCollection</code> 类:</p>
<ul>
<li><code>RandomizedCollection()</code>初始化空的 <code>RandomizedCollection</code> 对象。</li>
<li><code>bool insert(int val)</code>&nbsp;将一个 <code>val</code> 项插入到集合中,即使该项已经存在。如果该项不存在,则返回 <code>true</code> ,否则返回 <code>false</code></li>
<li><code>bool remove(int val)</code>&nbsp;如果存在,从集合中移除一个 <code>val</code> 项。如果该项存在,则返回 <code>true</code> ,否则返回 <code>false</code> 。注意,如果 <code>val</code> 在集合中出现多次,我们只删除其中一个。</li>
<li><code>int getRandom()</code> 从当前的多个元素集合中返回一个随机元素。每个元素被返回的概率与集合中包含的相同值的数量 <strong>线性相关</strong></li>
</ul>
<p>您必须实现类的函数,使每个函数的 <strong>平均</strong> 时间复杂度为 <code>O(1)</code></p>
<p><strong>注意:</strong>生成测试用例时,只有在 <code>RandomizedCollection</code><strong>至少有一项</strong> 时,才会调用 <code>getRandom</code></p>
<p>&nbsp;</p>
<p><strong>示例 1:</strong></p>
<pre>
<strong>输入</strong>
["RandomizedCollection", "insert", "insert", "insert", "getRandom", "remove", "getRandom"]
[[], [1], [1], [2], [], [1], []]
<strong>输出</strong>
[null, true, false, true, 2, true, 1]
<strong>解释</strong>
RandomizedCollection collection = new RandomizedCollection();// 初始化一个空的集合。
collection.insert(1);// 向集合中插入 1 。返回 true 表示集合不包含 1 。
collection.insert(1);// 向集合中插入另一个 1 。返回 false 表示集合包含 1 。集合现在包含 [1,1] 。
collection.insert(2);// 向集合中插入 2 ,返回 true 。集合现在包含 [1,1,2] 。
collection.getRandom();// getRandom 应当有 2/3 的概率返回 1 1/3 的概率返回 2 。
collection.remove(1);// 从集合中删除 1 ,返回 true 。集合现在包含 [1,2] 。
collection.getRandom();// getRandom 应有相同概率返回 1 和 2 。
</pre>
<p>&nbsp;</p>
<p><strong>提示:</strong></p>
<ul>
<li><code>-2<sup>31</sup>&nbsp;&lt;= val &lt;= 2<sup>31</sup>&nbsp;- 1</code></li>
<li><code>insert</code>,&nbsp;<code>remove</code>&nbsp;&nbsp;<code>getRandom</code>&nbsp;最多 <strong>总共</strong> 被调用&nbsp;<code>2 * 10<sup>5</sup></code>&nbsp;</li>
<li>当调用 <code>getRandom</code> 时,数据结构中 <strong>至少有一个</strong> 元素</li>
</ul>