LeetCode 470. 用 Rand7() 实现 Rand10()(随机概率)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 470. 用 Rand7() 实现 Rand10()(随机概率)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1. 題目
已有方法 rand7 可生成 1 到 7 范圍內的均勻隨機整數,試寫一個方法 rand10 生成 1 到 10 范圍內的均勻隨機整數。
不要使用系統的 Math.random() 方法。
示例 1: 輸入: 1 輸出: [7]示例 2: 輸入: 2 輸出: [8,4]示例 3: 輸入: 3 輸出: [8,1,10]提示: rand7 已定義。 傳入參數: n 表示 rand10 的調用次數。進階: rand7()調用次數的 期望值 是多少 ? 你能否盡量少調用 rand7() ?來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/implement-rand10-using-rand7
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。
2. 解題
class Solution {int a, b; public:int rand10() {a = rand7();b = rand7();while(a == 7)a = rand7(); //a = 1--6均勻分布while(b > 5)b = rand7(); //b = 1--5均勻分布if(a%2) //a有50%的概率是奇數(1,3,5)return b;//1--5return 5+b;//6--10(a有50%概率是偶數)} };
調用次數 2+∑i=1ni/7i+∑i=1ni?2i/7i=2.752+\sum_{i=1}^n i/{7^i}+\sum_{i=1}^n i*{2^i}/{7^i}=2.752+∑i=1n?i/7i+∑i=1n?i?2i/7i=2.75
看官方解法:
有個疑問 : 1-49的分布概率是不均勻的吧,比如 6= 1X6 = 2X3,而 7 = 1X7
總結
以上是生活随笔為你收集整理的LeetCode 470. 用 Rand7() 实现 Rand10()(随机概率)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode 74. 搜索二维矩阵(
- 下一篇: LintCode 1210. 升序子序列