Java实现 LeetCode 710 黑名单中的随机数(黑白名单)
2023-09-14 08:58:02 时间
710. 黑名单中的随机数
给定一个包含 [0,n ) 中独特的整数的黑名单 B,写一个函数从 [ 0,n ) 中返回一个不在 B 中的随机整数。
对它进行优化使其尽量少调用系统方法 Math.random() 。
提示:
1 <= N <= 1000000000
0 <= B.length < min(100000, N)
[0, N) 不包含 N,详细参见 interval notation 。
示例 1:
输入:
["Solution","pick","pick","pick"]
[[1,[]],[],[],[]]
输出: [null,0,0,0]
示例 2:
输入:
["Solution","pick","pick","pick"]
[[2,[]],[],[],[]]
输出: [null,1,1,1]
示例 3:
输入:
["Solution","pick","pick","pick"]
[[3,[1]],[],[],[]]
Output: [null,0,0,2]
示例 4:
输入:
["Solution","pick","pick","pick"]
[[4,[2]],[],[],[]]
输出: [null,1,3,1]
输入语法说明:
输入是两个列表:调用成员函数名和调用的参数。Solution的构造函数有两个参数,N 和黑名单 B。pick 没有参数,输入参数是一个列表,即使参数为空,也会输入一个 [] 空列表。
class Solution {
int n=0, cnt=0;
HashSet<Integer> h=null;
boolean [] set=null;
int [] candidates=null;
public Solution(int N, int[] blacklist) {
n=N;
int L=blacklist.length, i=0;
if( N>20000)
{
h=new HashSet<Integer>();
while( i<L )
{
h.add(blacklist[i]);
i++;
}
return;
}
set=new boolean [N];
while( i<L )
{
set[blacklist[i]]=true;
i++;
}
i=0;
cnt=N-L;
candidates=new int [cnt];
int j=0;
while( i<N )
{
if( set[i]==false )
{
candidates[j]=i;
j++;
}
i++;
}
}
public int pick() {
if( n>20000 )
{
int oup=(int)(Math.random()*n);
while( h.contains(oup) )
oup=(int)(Math.random()*n);
return oup;
}
return candidates[(int)(Math.random()*cnt)];
}
}
/**
* Your Solution object will be instantiated and called as such:
* Solution obj = new Solution(N, blacklist);
* int param_1 = obj.pick();
*/
相关文章
- java random函数用法_JAVA的Random类的用法详解[通俗易懂]
- md5 java 实现_MD5加密的Java实现
- java redis锁_Java中Redis锁的实现[通俗易懂]
- java axis_Java 使用Axis实现WebService实例
- java冒泡排序代码_Java冒泡排序
- java笛卡尔积算法_Java 笛卡尔积算法的简单实现
- 【说站】java中TCP通信是什么
- native2ascii java_Native2Ascii和Ascii2Native的Java实现
- java数组 初始化_用Java初始化数组「建议收藏」
- java查找字符的方法_Java字符串查找(3种方法)
- 移动App后台Java开发银联支付后台接口详解编程语言
- 解决Java程序连接MySQL的准确方案:Java连接MySQL的Jar包(java连接mysql的jar包)
- MySQL封装之Java实现(mysql封装java)
- Linux下配置Java环境变量的简易指南(linux配置java环境变量)
- Java监控MySQL性能:实现数据库运行优化(java监控mysql)
- Java 连接 Redis:实现数据快速传输(java连redis)
- 之间的交互Redis与Java实现交互的探索(redis和java)
- Java 调用 MySQL,编写数据库程序(java导入mysql)
- MacOS下Java开发环境搭建指南(macos开发java)
- 基于Linux操作系统上实现 Java 编程(linux r java)
- 使用Java实现MySQL数据恢复操作(java恢复mysql)
- Java实现嵌入式MySQL的新解决方案(java嵌入式mysql)
- 在Linux上实现Java程序的运行(linux运行java程序)
- Java程序在Linux系统中实现命令操作(java运行linux命令)
- Java程序调用Linux系统命令实现更多功能(java调用linux命令)
- Linux测试搭配Java快速实现稳定性验证(linux测试java)
- 使用Java语言写Redis实现一个分布式缓存系统(用java写个redis)
- 通往成功的道路通过Java考证Oracle获取更高的成就(java考证oracle)
- Java与Oracle联手赋能全新版本面世(java版本oracle)
- Redis实现Java语言下的遍历处理(redis遍历java)