网上看到的实现random数面试题,求讨论

随机生成器可以等概率生成0和1. 现在要利用这个随机生成器生成 1 / 3 的概率。请问如何实现?

一个简单的实现是丢两次,00表示1,01表示2,10表示3,11就重新丢

这个其实就是已知random2()函数,实现random3()函数
答案是先实现random4(), 就是能实现随机取0到3的这么一个函数, random4() = random2() * 2 + random2();
int val = random4(), 再加一个条件if(val <= 2) {return val} 就能实现random3()了
原理就是,已知能产生n之内随机数的一个函数,比如randomN(),我们就能很轻松的知道n * n之内的随机数产生办法,那就是randomN() * n + randomN(), 如果想要知道n * n * n的随机数范围方法就是(randomN() * n + randomN()) * n + randomN(),即randomN^N() * n + randomN(). 如此循环,你能得到n的乘方范围内的方法,直到n乘方值大于你想要得到的目标值,再加个条件判断就可以
leetcode 470

1 Like

:+1: 470可以参考