首页 > 其他分享 >710. 黑名单中的随机数

710. 黑名单中的随机数

时间:2022-08-23 23:56:15浏览次数:86  
标签:int 黑名单 Solution 710 blacklist 随机数 pick solution

 

labuladong 题解思路 难度困难

给定一个整数 n 和一个 无重复 黑名单整数数组 blacklist 。设计一种算法,从 [0, n - 1] 范围内的任意整数中选取一个 未加入 黑名单 blacklist 的整数。任何在上述范围内且不在黑名单 blacklist 中的整数都应该有 同等的可能性 被返回。

优化你的算法,使它最小化调用语言 内置 随机函数的次数。

实现 Solution 类:

  • Solution(int n, int[] blacklist) 初始化整数 n 和被加入黑名单 blacklist 的整数
  • int pick() 返回一个范围为 [0, n - 1] 且不在黑名单 blacklist 中的随机整数

 

示例 1:

输入
["Solution", "pick", "pick", "pick", "pick", "pick", "pick", "pick"]
[[7, [2, 3, 5]], [], [], [], [], [], [], []]
输出
[null, 0, 4, 1, 6, 1, 0, 4]

解释
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

 

 暴力
class Solution {
public:
    vector<int> nums;
    Solution(int n, vector<int>& blacklist) {
        unordered_set<int> black_set(blacklist.begin(),blacklist.end());
        for(int i = 0; i < n;i++) {
            if (black_set.find(i)!=black_set.end()) {
                continue;
            }
            nums.emplace_back(i);
        }
    }
    
    int pick() {
        int target = rand()%(nums.size());//生成闭区间[1,total]范围内的一个随机数  
        return nums[target];
    }
};

/**
 * Your Solution object will be instantiated and called as such:
 * Solution* obj = new Solution(n, blacklist);
 * int param_1 = obj->pick();
 */

 

标签:int,黑名单,Solution,710,blacklist,随机数,pick,solution
From: https://www.cnblogs.com/zle1992/p/16618312.html

相关文章

  • SPARK数据倾斜,随机数方式
    1、现象spark数据倾斜,有两种表现:大部分的task,都执行的特别特别快,刷刷刷,就执行完了(你要用client模式,standaloneclient,yarnclient,本地机器主要一执行spark-submit脚本,就......
  • C#获取不同的随机数
    publicstaticintGetRandomRangeNoRe2(intx,inty,int[]array=null){if(array==null){returnUnityEngine.Random.Rang......
  • php生成四位随机数
    1<?php23$arr1=array_merge(range('A','Z'),range(0,9),range('a','z'));//生成数组且合并为arr14shuffle($arr1);......
  • 【luogu CF1710C】XOR Triangle(数位DP)
    XORTriangle题目链接:luoguCF1710C题目大意给你一个数n,要你求有多少个满足条件的a,b,c使得它们两两异或得到的三个值可以得到一个非退化三角形。其中a,b,c值域在......
  • 【luogu CF1710B】Rain(差分)(性质)
    Rain题目链接:luoguCF1710B题目大意给你若干个函数,每个函数是一个45度往上线段和往下线段接在一起,两个长度一样,y轴从0出发的。然后对于每个函数,求把它以外的所有......
  • [2006年NOIP普及组] 明明的随机数
    明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的......