ARST打卡第122周[122/521]

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通