随机产生去重数组

HTML5学堂:数组、字符串、正则,三者应该说是众多开发者的死敌,方法很多,单纯的记住了没有意义,只有灵活应用才是王道~因此,对于此类问题,重要的是基本思路,根据思路回忆学过的知识,之后应用即可。

需求

总共需要在100个数字中,随机抽取10个不重复的数字。

原理

在最初时,设置了一个temp数组,所有的数组元素都是没有定义的。每次生成时使用随机函数以及数学的取整函数进行处理,之后进行判断,判断temp数组中的这个值是否存在。如果不存在,那么将这个数组的元素设置为1(也就是设置为存在状态),之后将获取到的这个num值push到数组当中,再将控制循环的变量加1。从而更好的控制while循环。

第二段代码比第一段代码的优势在于:第一段代码每次需要将当前新值与之前所有的值相对比,而且即便是生成的数字和之前数字不同,但仍要进行比较。也就是说,从第一个数到最后一个数,这10个数字的生成,如果是10个数字本身都没有任何重复的话(也就是直接符合要求),那么需要执行if判断语句10次,执行比较45次。而对于第二种方法,如果10个数字本身没有任何重复的话(也就是直接符合要求),那么只需要执行10次的判断语句,而不需要执行其他内容。从代码的运行上来说,性能要更好~~~

随机产生去重数组 方法1

var result = [];
for(var j = 0; j < 10; j++) {
   result[j] = Math.round( Math.random() * 100 );
   if(j > 0) {
       for(var m = j - 1; m >= 0; m--) {
           if(result[j] == result[m]) {
            j--;
            break;
           }
       }
   }
}

随机产生去重数组 方法2

代码中for循环和if语句嵌套的层次太多,如果不是随机取10个数,而是取更多的数的话,这样for循环的次数太多了,代码执行的时间也会变长。所以思考使用空间换时间的方式,来简化代码,并且减少语句的嵌套,代码如下:

var result = [];
var temp = [];
var len = 0;
var num;
while(len < 10){
   num = Math.round( Math.random() * 100 );
   if(!temp[num]) {
       temp[num] = 1;
       result.push(num);
       len++;
   }
}

欢迎沟通交流~HTML5学堂

原文发布于微信公众号 - HTML5学堂(h5course-com)

原文发表时间:2015-12-29

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员互动联盟

【C语言基础】内存的初始化

我们编写C语言的时候需要给变量申请一块内存区域,当我们创建一个内存区域的时候,内存中的数据十有八九是乱七八糟的(因为其他代码用过后遗留的数据并没有及时清掉) i...

3316
来自专栏从流域到海域

Python的闭包(Closure)与惰性计算(Lazy Evaluation)

闭包 在一些语言中,在函数中可以(嵌套)定义另一个函数时,如果内部的函数引用了外部的函数的变量,则可能产生闭包。运行时,一旦外部的 函数被执行,一个闭包就形成...

20610
来自专栏机器学习和数学

[编程经验] Python 中列表list介绍

列表是Python中非常重要的一种数据结构,使用频率非常高,本文主要介绍对于学习python的新手来说,需要掌握的一些基础知识。 1. 创建列表 ? 列表用中括...

2665
来自专栏编程坑太多

数据结构与算法—选择排序(Java实现)

1406
来自专栏我是业余自学C/C++的

二维变长数组

1125
来自专栏desperate633

Java中的collection架构总结

collection是java中用来收集对象的。java提供了collection的Api,为了避免出现死记api的情况,为了更好的使用collection,首...

644
来自专栏python读书笔记

《python算法教程》Day4 - 拓扑排序(基于有向无环图)拓扑排序简介代码实例

这是《python算法教程》的第4篇读书笔记。这篇笔记的主要内容为拓扑排序。 拓扑排序简介 在将一件事情分解为若干个小事情时,会发现小事情之间有完成的先后次序之...

33511
来自专栏PHP技术

php面试题(二)

1 <?php echo count (false); $a = count ("567") + count(null) + count(false); ec...

3028
来自专栏程序员互动联盟

【编程基础】Java面向对象基础知识

前言: 前面一系列文章讲了Java的一些语法基础知识、Java中的数据类型和Java中的运算符,基本上都是学习Java语言的基础知识,从这一讲开始将会逐步介绍J...

3265
来自专栏程序员互动联盟

【编程基础】C语言循环语句解析

循环语句是一种很重要的结构,这种结构的特点就是在某种条件下,会重复循环执行某一段代码,直到条件不成立为止。这里的条件称为循环条件,重复执行的那段代码称为循环体。...

3045

扫描关注云+社区