LeetCode 710 黑名单中的随机数[随机数] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 710 黑名单中的随机数[随机数] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。


解题思路:
实现[0,n-m]区间黑名单对[n-m, n]的非黑名单映射,然后取[0,n-m]随机数,如果是白名单直接返回,否则返回映射的白名单数,代码如下:

class Solution 
    unordered_map<int, int> b2w;
    int bound;

public:
    Solution(int n, vector<int> &blacklist) 
        int m = blacklist.size();
        bound = n - m;
        unordered_set<int> black;
        for (int b: blacklist) 
            if (b >= bound) 
                black.emplace(b);
            
        

        int w = bound;
        for (int b: blacklist) 
            if (b < bound) 
                while (black.count(w)) 
                    ++w;
                
                b2w[b] = w++;
            
        
    

    int pick() 
        int x = rand() % bound;
        return b2w.count(x) ? b2w[x] : x;
    
;

以上是关于LeetCode 710 黑名单中的随机数[随机数] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

710. Random Pick with Blacklist - LeetCode

[LeetCode] Random Pick with Blacklist 带黑名单的随机选取

数据结构与算法之深入解析“黑名单中的随机数”的求解思路与算法示例

有一个文本文件中存储了几个名单,实现随机获取一个人的名字

[LeetCode]138复制带随机指针的链表

LeetCode 380 O时间插入删除和获取随机元素[Map 数组] HERODING的LeetCode之路