递归算法实现,数组长度为 5 且元素的随机数在 2-32 间不重复的值

拆分问题:

数组长度为 5;

生成 2-32 之间的随机数;

向数组中插入数值时,如果已存在则重新生成;

采用递归的方式,而非循环语句实现。

function getRandom(max, min) {

max = max + 1;

min = min || 0;

return Math.floor(Math.random() * (max - min)) + min;

}

function insertArr(arr, length, min, max) {

if (arr.length < length) {

var value = getRandom(max, min);

console.log(‘value=‘ + value);

if (!~arr.indexOf(value)) {

arr.push(value);

}

insertArr(arr, length, min, max);

}

}

var result = [];

insertArr(result, 5, 32, 2);

console.log(result);

一、创建一个长度为5的空数组

var arr = new Array(5);

二、生成一个2-32之间的随机整数

如果是细致的考虑,就需要包括[2,32],(2,32),(2,32],[2,32)四种情况了,请自行解决,我们采用[2, 32]

var rand = Math.floor(Math.random()*(32-2+1) + 2)

三、将生成的随机数arr数组内,且arr内不可存在相同数字

function getNewArr(index,arr){

if(index >= 5){

return false

}

if(!arr.includes(rand)){

arr[index++] = rand

getNewArr(index, arr)

}else{

getNewArr(index, arr)

}

}

getNewArr(0, arr)

console.log(arr)

用object方式替换includes的判断

const getNewArr = function(len){

let arr = new Array(len),index = 0,obj = {};

let rand = Math.floor(Math.random()*(32-2+1)+2);

const pushArr = function(num){

if(index < num){

if(obj[index]){

pushArr(rand)

}else{

arr[index++] = num;

obj[num] = true;

pushArr(rand)

}

}

}

pushArr(rand)

return arr

}

console.log(getNewArr(5))

原文地址:https://www.cnblogs.com/dillonmei/p/12578483.html

时间: 2024-10-17 08:12:25

递归算法实现,数组长度为 5 且元素的随机数在 2-32 间不重复的值的相关文章

用最小的空间复杂度找出一个长度为n的数组且数据中的元素是[0,n-1]中任一个重复的数据。

比如:[1, 2, 3, 3, 2, 2, 6, 7, 8, 9] 中 2 or 3 分析:这道题目,实现比较容易,方法也不少,但要用最小的空间复杂度来看的话, 和充分考虑一下数据的下标和数据元素值的特点,比如如果把第 i 个位置放的值是 i,不是的情况做交换,去循环对比. 时间复杂度O(n),空间复杂度可到常量级 测试代码如下: public static void main(String[] args) { int n=10; List<Integer> list = new ArrayL

数组中有一个数字出现的次数超过了数组长度的一半,找出这个数

这个算法的时间复杂度是O(n),另外用了两个辅助变量. k用于临时存储数组中的数据,j用于存储某个数出现的次数. 开始时k存储数组中的第一个数,j为0,如果数组出现的数于k相等,则j加1,否则就减1,如果j为0,就把当前数组中的数赋给k 因为指定的数出现的次数大于数组长度的一半,所有j++与j--相抵消之后,最后j的值是大于等于1的,k中存的那个数就是出现最多的那个数. 下面这个算法只适合数组中数组中某个数的出现次数超过数组长度一半的数组,符合题意. c实现 1 #include<stdio.h

JavaScript 数组 length 属性获取数组长度或设置数组元素的数目

JavaScript 数组 length 属性 JavaScript 数组 length 属性可返回或设置或组中元素的数目,语法如下: array_object.length 利用 length 属性得到元素数目 <script language="JavaScript"> var array_1 = new Array('a',10.5,true); document.write( '数组长度 ' + array_1.length ); </script> 运

在一个整型数组中有一个元素的出现次数超过了数组长度的一半,试设计一个 在时间上尽可能高效的算法,找出这个元素。

题目:在一个整型数组中有一个元素的出现次数超过了数组长度的一半,试设计一个 在时间上尽可能高效的算法,找出这个元素.要求:(1)给出算法的基本设计思想.(2)根据设计思想,采用C或C++或Java语言描述算法,关键之处给出注释.(3)说明你所设计算法的时间复杂度和空间复杂度. (1)基本的设计思想: 一个数字出现的次数超过了长度的一半, 那么我们可以这样认为这个数字出现的个数一定大于其他全部数字出现的个数之和.算法的步骤如下: ①设数组为data[],数组长度为n,i=1.置currentAxi

&lt;15&gt;【掌握】一维数组的存储方式+【掌握】一维数组长度计算方法+【了解】一维数组元素地址+【掌握】一维数组长度计算方法 +【掌握】一维数组的越界问题+【掌握】应用:找最大值

[掌握]一维数组的存储方式 存储方式: 1)分配一块连续的存储空间 2)数组名称代表数组的首地址,从首地址开始,依此存入数组的第一个,第二个...第n个元素 3)每个元素占用相同的字节数(取决于数组类型) 4)元素之间的地址说连续. [了解]一维数组元素地址 #include <stdio.h> int main(int argc, const char * argv[]) { //定义两个数组 int x[]={1,2}; char ca[5]={'a','B','C','D','E'};

找出一个整数数组中超过数组长度一半的元素(Java)

Question:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字 package com.study.zhipengs.test; import java.util.Arrays; import java.util.HashMap; import java.util.Map; /** * 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. * 例如输入一个长度为9的数组{1, 2, 3, 2, 2, 2, 5, 4, * 2}.由于数字2在数组中出现了5次,超过数组长度

未排序数组中累加和为给定值的最长子数组长度

题目:给定一个数组arr,该数组无序,但每个值均为正数,再给定一个正数k.求arr得所有子数组中所有元素相加和为k的最长子数组长度. 解答:最优解可以做到时间复杂度为o(n),额外空间复杂度为o(1).首先用两个位置来标记子数组的左右两头,记为left和right,开始时都在数组的最左边(left=0,right=0).整体过程如下: 1.开始时变量left=0,right=0,代表子数组arr[left......right]. 2.变量sum始终表示子数组arr[left......righ

C++ 数组长度 以及 数组名作为参数 传递给函数

在看排序,首先是插入排序,思路理清后想用代码实现,然后问题来了: 如何求数组长度? 如果没记错,在Java中应该是有直接可用的方法的, Python中(序列)也有.len,在C/C++中,字符串倒是有strlen() (需要#include <string.h>) 一个办法是用 sizeof() 一.首先定义数组 int array[] = {18,10,15,7,1}; 一开始想都没想就直接在子函数里面 int array_length(int a[]){ int len = sizeof(

Shell数组:shell数组的定义、数组长度

Shell在编程方面比Windows批处理强大很多,无论是在循环.运算. bash支持一维数组(不支持多维数组),并且没有限定数组的大小.类似与C语言,数组元素的下标由0开始编号.获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0. 定义数组 在Shell中,用括号来表示数组,数组元素用“空格”符号分割开.定义数组的一般形式为:     array_name=(value1 ... valuen) 例如: array_name=(value0 value1 value2