九章算法面试题13 随机数生成器
2015-05-12 13:08
344 查看
九章算法官网-原文网址
http://www.jiuzhang.com/problem/13/题目
有一个随机数生成器,每次等概率的返回1到5中的一个整数。现在需要你利用这个随机数生成器来设计一个新的随机数生成器,每次可以等概率的返回1到7中的一个整数。解答
随机两次rand(5)相当于随机一次rand(25),将前21个数三三一组分为7组,如果得到的数<=21,则返回对应组号; 如果>21则重复上述过程,直到得到的数<=21。时间复杂度为O(2*21/25 + 4 * 21/25 * 4/25 + 6 * 21/25 * 4/25 * 4/25 … ) = O(1)
面试官角度
这个题目的解题思路有一点智力题的感觉。因为5和7互质,所以无法找到5^n被7整出。一个基本的陷阱是,调用两次rand(5)得到的是rand(25)而不是rand(10)。相关文章推荐
- 九章算法面试题28 链表找环
- 九章算法面试题84 奇偶分割数组
- 九章算法面试题47 分糖果
- 九章算法面试题63 快速幂
- 九章算法面试题74 中位数
- 九章算法-面试题总结(算法、强化算法、系统设计高清视频观看)
- 九章算法面试题15 字符串编辑距离
- 九章算法面试题29 子矩阵的最大公约数
- 九章算法面试题41 判断单词的包含关系
- 九章算法面试题85 搜索区间
- 九章算法面试题48 分割回文串
- 九章算法面试题64 找第k大的特殊数
- 九章算法面试题77 插入区间
- 九章算法面试题75 二叉树的最小深度
- 面试题常见算法之等概率生成随机数
- 九章算法面试题31 子数组的最大差
- 九章算法面试题42 构造MaxTree
- 九章算法面试题86 合并排序数组
- 九章算法面试题49 用栈实现队列
- 九章算法面试题65 拓扑排序