题目描述如下:
给定一个整数n和一个整数黑名单balcklist,目标是写一个随机函数,随机从(0,n-1)中选择一个不属于黑名单里的数,且每个数被取得的概率相同。
思路如下:
class Solution {
public:
int size;
unordered_map<int,int> map;
Solution(int n, vector<int>& blacklist) {
for(int i:blacklist){
map[i]=1;
}
size = n-blacklist.size();
int last = n-1;
for(int num:blacklist){
if(num>=size)
continue;
while(map.count(last)!=0){
last--;
}
map[num]=last;
last--;
}
}
int pick() {
int num=rand()%size;
if(map.count(num)!=0){
return map[num];
}
return num;
}
};