Contents

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通