2022-04-21:给定一个包含 [0,n) 中不重复整数的黑名单 blacklist,
写一个函数从 [0, n) 中返回一个不在 blacklist 中的随机整数,
对它进行优化使其尽量少调用系统方法 Math.random()。
1 <= n <= 1000000000,
0 <= blacklist.length < min(100000, N)。
力扣710. 黑名单中的随机数。

答案2022-04-21:

工程题目,黑名单存map。范围是[0,n),黑马单有m个;那么随机数的范围变成[0,n-m)。然后随机范围内的数字,碰到黑名单的数根据map映射。

代码用rust编写。代码如下:

use rand::Rng;
use std::collections::HashMap; fn main() {
let solution: Solution = Solution::new(7, vec![2, 3, 5]);
solution.pick();
solution.pick();
solution.pick();
solution.pick();
solution.pick();
solution.pick();
solution.pick();
} struct Solution {
size: i32,
convert: HashMap<i32, i32>,
} impl Solution {
fn new(n: i32, blacklist: Vec<i32>) -> Self {
let mut blacklist2: Vec<i32> = vec![];
let mut m: i32 = blacklist.len() as i32;
for i in 0..m {
blacklist2.push(blacklist[i as usize]);
} let mut blacklist = blacklist2;
blacklist.sort_by(|x, y| x.cmp(&y));
let mut n: i32 = n;
let mut ret = Solution {
size: 0,
convert: HashMap::new(),
};
let mut i: i32 = 0;
while i < m && blacklist[i as usize] < n {
n -= 1;
while n > blacklist[i as usize] {
if n == blacklist[(m - 1) as usize] {
m -= 1;
} else {
ret.convert.insert(blacklist[i as usize], n);
break;
}
n -= 1;
}
i += 1;
}
ret.size = n;
return ret;
} fn pick(&self) -> i32 {
let ans = rand::thread_rng().gen_range(0, self.size as isize) as i32;
if let Some(x) = self.convert.get(&ans) {
println!("{}", *x);
return *x;
} else {
println!("{}", ans);
return ans;
}
}
}

执行结果如下:


左神java代码

2022-04-21:给定一个包含 [0,n) 中不重复整数的黑名单 blacklist, 写一个函数从 [0, n) 中返回一个不在 blacklist 中的随机整数, 对它进行优化使其尽量少调用系的更多相关文章

  1. 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。

    题目描述 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数. 输入描述: 输入一个int型整数 输出描述: 按照从右向左的阅读顺序,返回一个不含重复数字的新的整数 输入例子 ...

  2. CUDA学习(四)之使用全局内存进行归约求和(一个包含N个线程的线程块)

    问题:使用CUDA进行数组元素归约求和,归约求和的思想是每次循环取半. 详细过程如下: 假设有一个包含8个元素的数组,索引下标从0到7,现通过3次循环相加得到这8个元素的和,使用一个间隔变量,该间隔变 ...

  3. Go“一个包含nil指针的接口不是nil接口”踩坑

    最近在项目中踩了一个深坑--"Golang中一个包含nil指针的接口不是nil接口",总结下分享出来,如果你不是很理解这句话,那推荐认真看下下面的示例代码,避免以后写代码时踩坑. ...

  4. 2022.02.21 UB

    2022.02.21 UB 参考资料: https://zhuanlan.zhihu.com/p/141467895 https://blog.csdn.net/ghscarecrow/article ...

  5. Go语言:编写一个 WebsiteRacer 的函数,用来对比请求两个 URL 来「比赛」,并返回先响应的 URL。如果两个 URL 在 10 秒内都未返回结果,返回一个 error。

    问题: 你被要求编写一个叫做 WebsiteRacer 的函数,用来对比请求两个 URL 来「比赛」,并返回先响应的 URL.如果两个 URL 在 10 秒内都未返回结果,那么应该返回一个 error ...

  6. 返回一个数组升序排列后的位置信息--C#程序举例

    返回一个数组升序排列后的位置信息--C#程序举例 返回某一个数组升序排序后的位置  比如:{8,10,9,11}排序后应该是{8,9,10,11},但是需要返回{1,3,2,4}   大概记忆里是这么 ...

  7. ZOJ 3963 Heap Partition set维护。给一个序列,将其划分成尽量少的序列,使每一个序列满足按照顺序构造二叉树,父母的值<=孩子的值。

    Heap Partition Time Limit: Seconds Memory Limit: KB Special Judge A sequence S = {s1, s2, ..., sn} i ...

  8. 最短路径(给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。)

    给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 例: 输入: [ [1,3,1], [1,5,1], [ ...

  9. 使用jQuery匹配文档中所有的li元素,返回一个jQuery对象,然后通过数组下标的方式读取jQuery集合中第1个DOM元素,此时返回的是DOM对象,然后调用DOM属性innerHTML,读取该元素 包含的文本信息

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 尽量少嵌套无用的div;外部文件尽量使用link而不要使用用@import

    最近的工作又学到了很多东西,在这里记录一下. 1,尽量少嵌套无用的div,这个问题领导很严肃的跟我提过很多次,因为我很喜欢用很多div,而且有很多div都是无存在意义的.后来领导给了我一些资料,我看了 ...

随机推荐

  1. 实验二:Open vSwitch虚拟交换机实践

    基础要求提交 a) /home/用户名/学号/lab2/目录下执行ovs-vsctl show命令.以及p0和p1连通性测试的执行结果截图: b) /home/用户名/学号/lab2/目录下开启Min ...

  2. 在Mac上不常用但会用到的命令

    文章目录 1. chflags 2. rename 1. chflags chflags hidden filename 给文件添加隐藏属性 chflags nohidden filename 去掉文 ...

  3. WEB/H5测试标准

  4. IntelliJ IDEA常用插件

    Mybatis Log Plugin安装好插件后,在Tools工具栏中可以看到安装好的插件,点击即可打开相应窗口,在Debug时,相应的Sql语句即可输出到此窗口,方便查看.此插件相当好用,提升开发效 ...

  5. Android笔记--案例:登录界面以及登录逻辑

    登录界面的实现 就是说,界面的绘制,并没有什么难度,只要控制好空间的分配就可以了 登录的逻辑实现 获取验证码.忘记密码的界面跳转.登录的实现: 确认文本框的输入内容是否符合题意:

  6. IDEA学生认证的步骤详解

    步骤详解 在上次使用学生认证的方法对jetbrains认证成功之后,咱们在IDEA这里认证一下吧! 一.点击help这里的register 如图所示: 进入这样一个界面: 然后点击左下角的的Log I ...

  7. Fiddler一些用法学习记录

    最近项目中用Fiddler较多,只会之前掌握的一些最简单的用法显得有点不太够.记录一下学习到的新用法. 一.需要mock.打开AutoResponder,Add Rule,填上需要mock的网址,需要 ...

  8. 如何基于 Agora Android SDK 在应用中实现视频通话?

    在很多产品,实时视频通话已经不是新鲜的功能了,例如视频会议.社交应用.在线教育,甚至也可能出现在一些元宇宙的场景中. 本文将教你如何通过声网Agora 视频 SDK 在 Android 端实现一个视频 ...

  9. Ocelot的限流、熔断和负载均衡

    一.限流 想要在Ocelot中设置限流,需要在设置如下绿色所示: { "GlobalConfiguration": { "RateLimitOptions": ...

  10. springboot多环境开发兼容问题(Maven和boot)

    <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven ...