这道题选自LeetCode470题,启发自题解,这道题在阿里的实习中出现过,解法基本是数学概率论中的知识。

当我们用random10实现random7的时候,我们根据概率论的知识知道random10会生成1-10,对于1-7的每个元素都是等概率的,所以,我们只需要判断生成的元素处于1-7区间,就能得到random7,反过来从一个random低实现一个random高,那就同样也是借助这种思路,我们可以借助random低模拟出一个random更高来实现random高。

(rand7()-1) * 7 + rand7()
rand7()-1 => 0-6 =>(rand7()-1)*7+rand7() => 1-49 变成了 rand49(),我们实际上是以rand49()来求rand10()

class Solution extends SolBase {public int rand10() {int ten = (rand7()-1) * 7 + rand7();while(ten > 10){ten = (rand7()-1) * 7 + rand7();}return ten;}
}

当然,当rand49来求rand10,确实有点太大,效率会变低,所以进一步改进,变成rand49求rand40:

class Solution extends SolBase {public int rand10() {int ten = (rand7()-1) * 7 + rand7();while(ten > 40){ten = (rand7()-1) * 7 + rand7();}return ten % 10 + 1;}
}

效率提高了67%

Rand7()实现Rand10()相关推荐

  1. 概率p输出1,概率1-p输出0,等概率输出0和1 【LeetCode】470. rand7()构造rand10() 系列变形(新浪、字节面试题)

    目录 1. 等概率输出0和1 1.1 题目描述 1.2 解题思路 & 代码 2. 以 1/N 的概率返回 1~N 之间的数 3. 给定函数rand5() 构造rand7() 或 rand7() ...

  2. leetcode 470. 用 Rand7() 实现 Rand10()

    难度:中等 频次:55 题目: 给定方法 rand7 可生成 [1,7] 范围内的均匀随机整数,试写一个方法 rand10 生成 [1,10] 范围内的均匀随机整数. 你只能调用 rand7() 且不 ...

  3. 【转】 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10...

    转自:http://blog.csdn.net/furturerock/article/details/6850634 View Code 1 int rand7() 2 { 3 return ran ...

  4. 【数据结构与算法】之深入解析“用Rand7()实现Rand10()”的求解思路与算法示例

    一.题目要求 给定方法 rand7 可生成 [1,7] 范围内的均匀随机整数,试写一个方法 rand10 生成 [1,10] 范围内的均匀随机整数. 你只能调用 rand7() 且不能调用其他方法,请 ...

  5. LeetCode 470. 用 Rand7() 实现 Rand10()(随机概率)

    1. 题目 已有方法 rand7 可生成 1 到 7 范围内的均匀随机整数,试写一个方法 rand10 生成 1 到 10 范围内的均匀随机整数. 不要使用系统的 Math.random() 方法. ...

  6. 【LeetCode笔记】470. 用Rand7()实现Rand10()(Java、概率)

    文章目录 题目描述 代码 & 思路 更新版 三刷 - 极简版 题目描述 貌似是比较高频的面试题目啊,有学概率论内味了(讲道理我概率论学得不好) 代码 & 思路 先用Rand7实现Ran ...

  7. 【每天学点算法题10.16】由rand7()生成rand10()

    题目描述:给你一个函数rand7(),它可以等概率地生成1~7之间的随机数,使用这个函数rand7(),生成一个函数rand10(),使其能够等概率地生成1~10之间的随机数. 解决办法:舍去法.我们 ...

  8. 【经典题目】rand7()生成rand10()——随机数算法

    随机数算法的转换 从小数向大数映射 这一类的算法主要分为两种,一种是从小数映射向大数,rand7()-->rand10().另外一种是从大数映射向小数rand10()-->rand7() ...

  9. 2021届图像/计算机视觉算法提前批的面经 | 附内推码

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:雲水謡 来源:https://www.nowcoder.com ...

最新文章

  1. 超参数调优河伯、组合优化器CompBO,华为诺亚开源贝叶斯优化库
  2. 技术项目 - Linux Swap
  3. Exchange 2003群集的安装
  4. java简单springboot系统_Springboot系列 3 - 建立简单的用户登录系统
  5. mysql 安装 utf8mb4_mysql 安装和修改编码(utf8mb4)
  6. 把一个字符串里符合表情文字标签的地方全部替换为相应的图片的方法
  7. C 之父:C 的成功属于意料之外,C 11是转折点
  8. CSS具有最高优先级 !important
  9. go语言中关于文件的操作+工作目录的拼接
  10. 计算机英语词汇助记,英语单词查询软件
  11. 前端入门篇(四十)JS基础7浏览器原理和BOM
  12. 徐思201771010132《面向对象程序设计(java)》第一周学习总结
  13. 物联网智能家居与射频识别技术应用
  14. 利用丁香园数据生成疫情分布地图(R语言)
  15. snownlp对天猫商品评论数据进行情感分析(附源码)
  16. h5页面定时跳转+读秒
  17. 2009 雷人记录汇总[转]
  18. 华为交换机基础学习命令(ensp)
  19. 看完这篇Java基础,你也是天花板
  20. Redis键-值数据库 nosql 数据建模(4)------ 如何存储主从表数据 一对超级多关系

热门文章

  1. Linux运维之道之ENGINEER1.3(配置SMB共享,配置NFS共享)
  2. 即将改变软件开发的5个Java9新特性
  3. 开源软件、开源硬件、……开源餐馆来了
  4. 工厂模式之消除switch/case语句
  5. [IOS地图开发系类]5、改变大头针MKPinAnnotationView的颜色
  6. 如何让apache支持3gp下载
  7. C#中的异步调用剖析
  8. 并行开发的基本概念及两个重要的定律
  9. 新IT运维模式下,全栈溯源助你解应用性能监控难题
  10. mac/unix系统:C++实现一个端口扫描器