mirror of
				https://gitee.com/coder-xiaomo/leetcode-problemset
				synced 2025-11-04 11:43:12 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			46 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
<p>给定一个整数 <code>n</code> 和一个 <strong>无重复</strong> 黑名单整数数组 <code>blacklist</code> 。设计一种算法,从 <code>[0, n - 1]</code> 范围内的任意整数中选取一个 <strong>未加入 </strong>黑名单 <code>blacklist</code> 的整数。任何在上述范围内且不在黑名单 <code>blacklist</code> 中的整数都应该有 <strong>同等的可能性</strong> 被返回。</p>
 | 
						||
 | 
						||
<p>优化你的算法,使它最小化调用语言 <strong>内置</strong> 随机函数的次数。</p>
 | 
						||
 | 
						||
<p>实现 <code>Solution</code> 类:</p>
 | 
						||
 | 
						||
<ul>
 | 
						||
	<li><code>Solution(int n, int[] blacklist)</code> 初始化整数 <code>n</code> 和被加入黑名单 <code>blacklist</code> 的整数</li>
 | 
						||
	<li><code>int pick()</code> 返回一个范围为 <code>[0, n - 1]</code> 且不在黑名单 <code>blacklist</code> 中的随机整数</li>
 | 
						||
</ul>
 | 
						||
 | 
						||
<p> </p>
 | 
						||
 | 
						||
<p><strong>示例 1:</strong></p>
 | 
						||
 | 
						||
<pre>
 | 
						||
<strong>输入</strong>
 | 
						||
["Solution", "pick", "pick", "pick", "pick", "pick", "pick", "pick"]
 | 
						||
[[7, [2, 3, 5]], [], [], [], [], [], [], []]
 | 
						||
<strong>输出</strong>
 | 
						||
[null, 0, 4, 1, 6, 1, 0, 4]
 | 
						||
 | 
						||
<b>解释
 | 
						||
</b>Solution solution = new Solution(7, [2, 3, 5]);
 | 
						||
solution.pick(); // 返回0,任何[0,1,4,6]的整数都可以。注意,对于每一个pick的调用,
 | 
						||
                 // 0、1、4和6的返回概率必须相等(即概率为1/4)。
 | 
						||
solution.pick(); // 返回 4
 | 
						||
solution.pick(); // 返回 1
 | 
						||
solution.pick(); // 返回 6
 | 
						||
solution.pick(); // 返回 1
 | 
						||
solution.pick(); // 返回 0
 | 
						||
solution.pick(); // 返回 4
 | 
						||
</pre>
 | 
						||
 | 
						||
<p> </p>
 | 
						||
 | 
						||
<p><strong>提示:</strong></p>
 | 
						||
 | 
						||
<ul>
 | 
						||
	<li><code>1 <= n <= 10<sup>9</sup></code></li>
 | 
						||
	<li><code>0 <= blacklist.length <- min(10<sup>5</sup>, n - 1)</code></li>
 | 
						||
	<li><code>0 <= blacklist[i] < n</code></li>
 | 
						||
	<li><code>blacklist</code> 中所有值都 <strong>不同</strong></li>
 | 
						||
	<li> <code>pick</code> 最多被调用 <code>2 * 10<sup>4</sup></code> 次</li>
 | 
						||
</ul>
 |