随机生成10个不重复的0-100的数字
在面试时,面试官问了我一道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的数字相关推荐
- java随机生成10个不重复的数字,随机生成10个不重复的0-100的数字(实例讲解)
在面试时,面试官问了我一道js题:随机生成一个含有10个元素的数组,且元素为0-100的不重复的整数.当时的第一反应是for循环生成10个数字,但是可能会有重复的情况:进一步思考,需要对生成的数字进行 ...
- java 随机16位随机数字_随机生成防猜不重复的16位纯数字序列号【快速且高性能】...
16位纯数字,组合起来是多少个呢?很难一口说出准确数字. 2位纯数字,组合起来是多少个呢? 10*10 = 100个 3位纯数字,组合起来是多少个呢? 10*10*10 = 1000个 因为每个数字都 ...
- 随机生成10位数的字符串ID
简述 项目中,有种业务需要当前表中存个另外一个表中的主键ID字段,如果用数据库自增的话,容易出现重复 比如A表主键ID自增1.2.3.....,B表主键ID自增1.2.3.....,A表中有个字段是B ...
- 随机生成邀请码、随机生成10位数字、随机生成英文字母+数字
/*** 随机字符串生成* @param int $length 生成字符串长度* @param array $str_content ['number','capital_chars','lower ...
- 双色球规则:双色球每注投注号码由6个红色球号码和1个蓝色球号码组成。红色球从1—33中随机生成6个不重复的号码;蓝色球号码从1—16中随机生成1个;客户通过键盘录入购买的红色球6个(不重复)和蓝色
双色球规则:双色球每注投注号码由6个红色球号码和1个蓝色球号码组成. 红色球从1-33中随机生成6个不重复的号码:蓝色球号码从1-16中随机生成1个: 客户通过键盘录入购买的红色球6个(不重复)和蓝色 ...
- shell 随机生成10个数,找出最大值
分析:随机生成10个数? 生成随机数,这里用RANDOM函数,我把生成的这10个数定义为一个数组array,定义MAX的初始值为array[0] 使用for循环进行与每一个元素的值进行比较,如果有比 ...
- php生成10万个字符串,有什么好的方法可以生成十万条不重复的13位纯数字字符串...
有什么好的方法可以生成十万条不重复的13位纯数字字符串 回复内容: 有什么好的方法可以生成十万条不重复的13位纯数字字符串 一个个来.从13个0开始,一次加1... 可用时间戳来生成,或者后面再加随机 ...
- python随机密码生成在26个字母中随机生成10个_习题6:二.3 随机密码生成
编写程序在26个字母大小写和9个数字组成的列表中随机生成10个8位密码. import random num_ls = [] # 创建数字.小写字母.大写字母空列表 str_ls = [] STR_l ...
- 随机密码生成。编写程序,在26个字母大小写和10个数字组成的列表中随机生成10个8位密码。
随机密码生成.编写程序,在26个大小写字母和10和数字组成的列表中随机生成10个8位的密码: 根据题目要求,我们编写的程序主干要有哪些内容呢? 1.随机选择 2.26个大小写字母 3.10个阿拉伯数字 ...
最新文章
- c语言填空三个数找中间大小,2013计算机等级考试二级C语言填空题.doc
- 什么是Springmvc以及如果编写第一个入门程序
- Docker JFrog Artifactory 7.27.10 maven私服(IDEA 实战篇01) linux
- java实现手机开关机_Android 系统重启与关机:Java 代码实现
- devops 开发_DevOps如何消除开发瓶颈
- YUI3学习笔记 ( 8 )
- Dell 12G服务器 手动安装RedHat 6.X
- mysql 查看连接_怎么实时查看mysql当前连接数
- LeetCode—1.快速排序算法
- 关于java小游戏的暂停,退出和从新开始
- linux下xp镜像文件iso下载,Windows XP SP3简体中文专业版[官方MSDN正式原版ISO镜像]
- 【python】微信朋友圈数据分析及可视化(爬虫+数据挖掘)
- 剪映怎么把无字幕的英文视频翻译成制作成中文字幕?(附教程+剪映字幕翻译工具免费下载)...
- 公差基本偏差代号_基本偏差代号公差等级代号.ppt
- 通达信 移动平均算法_通达信公式教程,建议收藏,关注「所有文章只发表一次」...
- es 修改mapping
- 数学基础一:直线方程Ax+By+C=0
- HHUOJ 1012 欧洲杯(水题)
- 故障修复:mswinsck 加载失败
- 时间序列预测——ARIMA
热门文章
- java基础_笔记(dos,java基础信息,final,static,abstract,接口,抽象类,数组,排序string,stringbuff/stringbuilder)
- java集成腾讯云COS
- txtai 4.0 正式发布,构建 AI 驱动的语义搜索应用
- 我开通了个人网站,望指教
- Typora主题,设置代码块Mac风格三个小圆点
- 2018年中国(上海)国际乐器本特历奈特钢琴荣耀参展
- 【转】Gartner:2011十大战略技术 云计算居首
- php iphoto,iPhoto
- 什么是loader? (webpack学习篇4)
- QProcess用法