2022-04-21:给定一个包含 [0,n) 中不重复整数的黑名单 blacklist, 写一个函数从 [0, n) 中返回一个不在 blacklist 中的随机整数, 对它进行优化使其尽量少调用系
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;
}
}
}
执行结果如下:

2022-04-21:给定一个包含 [0,n) 中不重复整数的黑名单 blacklist, 写一个函数从 [0, n) 中返回一个不在 blacklist 中的随机整数, 对它进行优化使其尽量少调用系的更多相关文章
- 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。
题目描述 输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数. 输入描述: 输入一个int型整数 输出描述: 按照从右向左的阅读顺序,返回一个不含重复数字的新的整数 输入例子 ...
- CUDA学习(四)之使用全局内存进行归约求和(一个包含N个线程的线程块)
问题:使用CUDA进行数组元素归约求和,归约求和的思想是每次循环取半. 详细过程如下: 假设有一个包含8个元素的数组,索引下标从0到7,现通过3次循环相加得到这8个元素的和,使用一个间隔变量,该间隔变 ...
- Go“一个包含nil指针的接口不是nil接口”踩坑
最近在项目中踩了一个深坑--"Golang中一个包含nil指针的接口不是nil接口",总结下分享出来,如果你不是很理解这句话,那推荐认真看下下面的示例代码,避免以后写代码时踩坑. ...
- 2022.02.21 UB
2022.02.21 UB 参考资料: https://zhuanlan.zhihu.com/p/141467895 https://blog.csdn.net/ghscarecrow/article ...
- Go语言:编写一个 WebsiteRacer 的函数,用来对比请求两个 URL 来「比赛」,并返回先响应的 URL。如果两个 URL 在 10 秒内都未返回结果,返回一个 error。
问题: 你被要求编写一个叫做 WebsiteRacer 的函数,用来对比请求两个 URL 来「比赛」,并返回先响应的 URL.如果两个 URL 在 10 秒内都未返回结果,那么应该返回一个 error ...
- 返回一个数组升序排列后的位置信息--C#程序举例
返回一个数组升序排列后的位置信息--C#程序举例 返回某一个数组升序排序后的位置 比如:{8,10,9,11}排序后应该是{8,9,10,11},但是需要返回{1,3,2,4} 大概记忆里是这么 ...
- ZOJ 3963 Heap Partition set维护。给一个序列,将其划分成尽量少的序列,使每一个序列满足按照顺序构造二叉树,父母的值<=孩子的值。
Heap Partition Time Limit: Seconds Memory Limit: KB Special Judge A sequence S = {s1, s2, ..., sn} i ...
- 最短路径(给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。)
给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 例: 输入: [ [1,3,1], [1,5,1], [ ...
- 使用jQuery匹配文档中所有的li元素,返回一个jQuery对象,然后通过数组下标的方式读取jQuery集合中第1个DOM元素,此时返回的是DOM对象,然后调用DOM属性innerHTML,读取该元素 包含的文本信息
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 尽量少嵌套无用的div;外部文件尽量使用link而不要使用用@import
最近的工作又学到了很多东西,在这里记录一下. 1,尽量少嵌套无用的div,这个问题领导很严肃的跟我提过很多次,因为我很喜欢用很多div,而且有很多div都是无存在意义的.后来领导给了我一些资料,我看了 ...
随机推荐
- Conda简单教程 - 搬运
Conda简单教程 转自:https://www.cnblogs.com/nuccch/p/15046969.html 目录 什么是Conda 安装Conda 虚拟环境管理 模块管理 何时使用Cond ...
- 3---java中的集合
集合是什么:表示一组元素的对象,有的是有序的,有的是无序的,有的是可重复的,有的是不可重复的. 首先根是:Collection 1:Set 没有重复元素 SortedSet 有序的Set 2:Lis ...
- VC9.0 for Python2
python2安转包时提示: pip install xxx时,提示 Microsoft Visual C++ 9.0 is required 下载并安装: 链接:https://pan.baidu. ...
- Linux部分文件管理类命令
1.创建空文件和刷新时间 touch命令可以用来创建空文件或刷新文件的时间 touch [OPTION]... FILE... 选项: -a 仅改变atime和ctime -m 仅改变mtime和ct ...
- 使用 GVM 搭建可维护的 Golang 开发环境
当你想完成 Golang 开发环境的便捷安装以及随时更新和保障多个版本的 Golang 共存的时候,就需要使用到 Golang 的专门版本管理工具 --gvm 本篇随笔记录了在 Ubuntu 下安装使 ...
- 【数仓运维实践】关于GaussDB(DWS)单SQL磁盘空间管控
摘要:本文主要讲解数仓运维中遇到单SQL磁盘空间管控问题的解析和方案. 本文分享自华为云社区<GaussDB(DWS)运维 -- 单SQL磁盘空间管控>,作者: 譡里个檔. [问题描述] ...
- 动态求前n个最小值(最大值)
注: 由于最小值和最大值的分析过程完全相同,这里我们只讨论最小值的分析流程,最大值同理 问题描述 每次给定一个数值,询问此数值以及之前给定数值中最小的n个数 例如给定数值的顺序为:8 7 1 2 9 ...
- 11.getshell常见思路与技巧
getshell常见思路与技巧 1.常规打点思路 信息收集: 绕开CDN找到所有靶标的真实IP 找到所有目标真实的C段 对所有的C段进行基础服务器的探测,端口的扫描.识别 对所有目标的子域名进行收集 ...
- BrightlyPro - 照片视屏后期自动调色增亮工具
BrightlyPro 自动增强您的照片和视频,你最需要它.通过一个滑块,BrightlyPro 立即使您的照片自适应地亮起来,同时保持光影之间令人愉悦的平衡,而不会扭曲已经点亮的区域. 下载 ➤ B ...
- php实现微信小程序消息通知
大家好,又见面了,我是你们的朋友全 接入消息通知指引地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/custommsg/callback_help.h ...