Algorithm
lc470_用Rand7()实现Rand10()
思路
思路一
搞10次rand7(),然后除以7,这样就能 10,70
–> 1,10
但是第6个样例直接挂了…而且没有看到比8大的数
思路二
直接判断有多少个0.7,结果第7个样例挂了
官方思路
要均匀,所以均匀采样
官方链接
代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
class Solution {
public:
int rand10() {
int a, b, idx;
while (true) {
a = rand7();
b = rand7();
idx = b + (a - 1) * 7;
if (idx <= 40) {
return 1 + (idx - 1) % 10;
}
a = idx - 40;
b = rand7();
// get uniform dist from 1 - 63
idx = b + (a - 1) * 7;
if (idx <= 60) {
return 1 + (idx - 1) % 10;
}
a = idx - 60;
b = rand7();
// get uniform dist from 1 - 21
idx = b + (a - 1) * 7;
if (idx <= 20) {
return 1 + (idx - 1) % 10;
}
}
}
};
|
Review
【TED演讲】少数科技公司如何每天控制数亿人的思想
现在的科技软件会不断吸引我们花费时间在手机上,我们应该学会抗拒,学会把时间花在自己真正重要的事情上面
Tips
PlantUML快速指南
Share
yum报错网络不可达,但是配置的网络能够ping通