在面试时,面试官问了我一道js题:随机生成一个含有10个元素的数组,且元素为0-100的不重复的整数。当时的第一反应是for循环生成10个数字,但是可能会有重复的情况;进一步思考,需要对生成的数字进行验证才能放到数组里面,但是问题来了,如果恰好有重复的,那我之前for循环生成的10个数字就不够了。当时回答的不好,回来后再仔细思考一下,想出了2中解决方案,第一种其实是尝试过程中得出的,还是第二种比较好。

第一种:

function random () {
var arr = [];
for (var i = 0; i < 100; i++) {//生成循环100次,生成100个数字。该方法最大的弊端,为了避免有重复的情况导致数组不足10个元素,所以生成较多的数字
var num = Math.floor(Math.random() * 100);//生成0-100的随机整数
if (arr.length == 0) {
arr.push(num);//数组为空时直接放入数组
} else {
for (var j = 0; j < arr.length; j++) {//循环已存在的数组
if (arr.join(',').indexOf(num) < 0 && arr.length <= 10) {//判断已存在数组中是否已有刚生成的数字,如没有且数组长度不足10才将num放入arr
arr.push(num);                                        //这样又会导致生成的大部分数字被arr.length <= 10排除掉了,浪费性能
}
}
}
}
}

第二种:

function random () {var arr = [];
while(arr.length < 10) {//原数组长度为0,每次成功添加一个元素后长度加1,则当数组添加最后一个数字之前长度为9即可
var num = Math.floor(Math.random() * 100);//生成一个0-100的随机整数
if (arr.length === 0) {//如果数组长度为0则直接添加到arr数组
arr.push(num);
} else {
for (var i = 0; i < arr.length; i++) {//当新生成的数字与数组中的元素不重合时则添加到arr数组
if (arr.join(',').indexOf(num) < 0) {
arr.push(num);
}
}
}
}
}

看到了Dream_It_Possible的回复,多谢,写的比我好,查询数组中时候是否有某个元素时,我先用了indexOf,结果报错了,我也没有细究,就将数组转化为字符串再验证,看了他的代码我又去查了一下,数组也是有这个方法的。下面附上他写的代码:

function random(len, start, end) {
var arr = [];
function _inner(start, end) {
var span = end - start;
return parseInt(Math.random() * span + start)
}
while (arr.length < len) {
var num = _inner(start, end);
if (arr.indexOf(num) == -1) {
arr.push(num);
}
}
return arr;
}

随机生成10个不重复的0-100的数字相关推荐

  1. java随机生成10个不重复的数字,随机生成10个不重复的0-100的数字(实例讲解)

    在面试时,面试官问了我一道js题:随机生成一个含有10个元素的数组,且元素为0-100的不重复的整数.当时的第一反应是for循环生成10个数字,但是可能会有重复的情况:进一步思考,需要对生成的数字进行 ...

  2. java 随机16位随机数字_随机生成防猜不重复的16位纯数字序列号【快速且高性能】...

    16位纯数字,组合起来是多少个呢?很难一口说出准确数字. 2位纯数字,组合起来是多少个呢? 10*10 = 100个 3位纯数字,组合起来是多少个呢? 10*10*10 = 1000个 因为每个数字都 ...

  3. 随机生成10位数的字符串ID

    简述 项目中,有种业务需要当前表中存个另外一个表中的主键ID字段,如果用数据库自增的话,容易出现重复 比如A表主键ID自增1.2.3.....,B表主键ID自增1.2.3.....,A表中有个字段是B ...

  4. 随机生成邀请码、随机生成10位数字、随机生成英文字母+数字

    /*** 随机字符串生成* @param int $length 生成字符串长度* @param array $str_content ['number','capital_chars','lower ...

  5. 双色球规则:双色球每注投注号码由6个红色球号码和1个蓝色球号码组成。红色球从1—33中随机生成6个不重复的号码;蓝色球号码从1—16中随机生成1个;客户通过键盘录入购买的红色球6个(不重复)和蓝色

    双色球规则:双色球每注投注号码由6个红色球号码和1个蓝色球号码组成. 红色球从1-33中随机生成6个不重复的号码:蓝色球号码从1-16中随机生成1个: 客户通过键盘录入购买的红色球6个(不重复)和蓝色 ...

  6. shell 随机生成10个数,找出最大值

    分析:随机生成10个数?  生成随机数,这里用RANDOM函数,我把生成的这10个数定义为一个数组array,定义MAX的初始值为array[0] 使用for循环进行与每一个元素的值进行比较,如果有比 ...

  7. php生成10万个字符串,有什么好的方法可以生成十万条不重复的13位纯数字字符串...

    有什么好的方法可以生成十万条不重复的13位纯数字字符串 回复内容: 有什么好的方法可以生成十万条不重复的13位纯数字字符串 一个个来.从13个0开始,一次加1... 可用时间戳来生成,或者后面再加随机 ...

  8. python随机密码生成在26个字母中随机生成10个_习题6:二.3 随机密码生成

    编写程序在26个字母大小写和9个数字组成的列表中随机生成10个8位密码. import random num_ls = [] # 创建数字.小写字母.大写字母空列表 str_ls = [] STR_l ...

  9. 随机密码生成。编写程序,在26个字母大小写和10个数字组成的列表中随机生成10个8位密码。

    随机密码生成.编写程序,在26个大小写字母和10和数字组成的列表中随机生成10个8位的密码: 根据题目要求,我们编写的程序主干要有哪些内容呢? 1.随机选择 2.26个大小写字母 3.10个阿拉伯数字 ...

最新文章

  1. c语言填空三个数找中间大小,2013计算机等级考试二级C语言填空题.doc
  2. 什么是Springmvc以及如果编写第一个入门程序
  3. Docker JFrog Artifactory 7.27.10 maven私服(IDEA 实战篇01) linux
  4. java实现手机开关机_Android 系统重启与关机:Java 代码实现
  5. devops 开发_DevOps如何消除开发瓶颈
  6. YUI3学习笔记 ( 8 )
  7. Dell 12G服务器 手动安装RedHat 6.X
  8. mysql 查看连接_怎么实时查看mysql当前连接数
  9. LeetCode—1.快速排序算法
  10. 关于java小游戏的暂停,退出和从新开始
  11. linux下xp镜像文件iso下载,Windows XP SP3简体中文专业版[官方MSDN正式原版ISO镜像]
  12. 【python】微信朋友圈数据分析及可视化(爬虫+数据挖掘)
  13. 剪映怎么把无字幕的英文视频翻译成制作成中文字幕?(附教程+剪映字幕翻译工具免费下载)...
  14. 公差基本偏差代号_基本偏差代号公差等级代号.ppt
  15. 通达信 移动平均算法_通达信公式教程,建议收藏,关注「所有文章只发表一次」...
  16. es 修改mapping
  17. 数学基础一:直线方程Ax+By+C=0
  18. HHUOJ 1012 欧洲杯(水题)
  19. 故障修复:mswinsck 加载失败
  20. 时间序列预测——ARIMA

热门文章

  1. java基础_笔记(dos,java基础信息,final,static,abstract,接口,抽象类,数组,排序string,stringbuff/stringbuilder)
  2. java集成腾讯云COS
  3. txtai 4.0 正式发布,构建 AI 驱动的语义搜索应用
  4. 我开通了个人网站,望指教
  5. Typora主题,设置代码块Mac风格三个小圆点
  6. 2018年中国(上海)国际乐器本特历奈特钢琴荣耀参展
  7. 【转】Gartner:2011十大战略技术 云计算居首
  8. php iphoto,iPhoto
  9. 什么是loader? (webpack学习篇4)
  10. QProcess用法