请编程实现:产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复(百度了一下,get一种高性能算法,非递归)...
网上找到一种更好的实现方式:
(1)把N个数放到容器A(int数组)中.
(2)从N个数中随机取出1个数放入容器B(int数组)中.
(3)把容器A中最后一个数与随机抽取的数对调 或者 把容器A中最后一个数覆盖随机抽取出来的数.
(4)这时从容器A(假设N个数,索引0 到 索引N-2)之间随机取一个数.再放入容器B中,重复此步骤.
说明:也就是第二次是从容器A中 第一个元素到倒数第二个元素 中随机取一个数.
这种好处是,随机数所取范围逐步缩小,而且杜绝了大数据时集合执行删除操作时产生的瓶颈.
1 namespace Wolfy.RandomDemo2 {3 class Program4 {5 static void Main(string[] args)6 {7 int[] result = GetRandom(100);8 for (int i = 0; i < result.Length; i++)9 { 10 Console.WriteLine(result[i]); 11 } 12 Console.WriteLine("over:" + result.Length); 13 Console.Read(); 14 } 15 /// <summary> 16 /// 获得无重复随机数组 17 /// </summary> 18 /// <param name="n">上限n</param> 19 /// <returns>返回随机数组</returns> 20 static int[] GetRandom(int n) 21 { 22 //容器A和B 23 int[] arryA = new int[n]; 24 int[] arryB = new int[n]; 25 //填充容器a 26 for (int i = 0; i < arryA.Length; i++) 27 { 28 arryA[i] = i + 1; 29 } 30 //随机对象 31 Random r = new Random(); 32 //最后一个元素的索引 如n=100,end=99 33 int end = n - 1; 34 for (int i = 0; i < n; i++) 35 { 36 //生成随机数 因为随机的是索引 所以从0到100取,end=100 37 //一个大于等于 minValue 且小于 maxValue 的 32 位带符号整数,即: 返回的值范围包括 minValue 但不包括 maxValue。 38 //如果 minValue 等于 maxValue,则返回 minValue 39 // 40 int minValue = 0; 41 int maxValue = end + 1; 42 int ranIndex = r.Next(minValue, maxValue); 43 //把随机数放在容器B中 44 arryB[i] = arryA[ranIndex]; 45 //用最后一个元素覆盖取出的元素 46 arryA[ranIndex] = arryA[end]; 47 //缩减随机数生成的范围 48 end--; 49 } 50 //返回生成的随机数组 51 return arryB; 52 } 53 } 54 }
转载于:https://www.cnblogs.com/xujingyang/p/5117322.html
请编程实现:产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复(百度了一下,get一种高性能算法,非递归)...相关推荐
- java长度为100的数组_产生一个int数组,长度为100,并向其中随机插入1-100,不重复...
#define RANDOM(X) (rand() % X + 1) int main() { //标志数组 int book[] = {}; int result[] = {}; //默认的随机数种 ...
- 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。
产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复. int[] intArr=new int[100]; ArrayList myList=new ArrayList(); ...
- 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复
写在前面 前天去面试了,给出的笔试中有这样的一道算法题,产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复 当时,脑子一热,也没想那么多,就用集合实现了一下,经面试官提醒,发现 ...
- Scanner读取一个int数组
Scanner读取一个int数组 因为有段时间用C,以为当sc.hasNextInt()这种输入检测遇到回车符时会返回false,哪知道sc.hasNextInt()会忽略忽略一切空白符(包含回车符) ...
- 判断一个int数组中的元素是否存在重复
package com.hbut.test2; import java.util.ArrayList; import java.util.HashSet; import java.util.List; ...
- int java 声明_怎样用java定义一个int数组 C++ 怎么声明一个整型数组?
导航:网站首页 > 怎样用java定义一个int数组 C++ 怎么声明一个整型数组? 怎样用java定义一个int数组 C++ 怎么声明一个整型数组? 相关问题: 匿名网友: int[] anA ...
- java定义int数组_怎样用java定义一个int数组
展开全部 数组:是一组相关变量的集合数组是一组相关数据的集合,一个数组实际上就是32313133353236313431303231363533e4b893e5b19e31333363373731一连 ...
- leetcode:java.T018_4Sum---给定一个整数数组,找出a + b + c + d = target的唯一解,不能有重复元素组
<span style="color:#ff4635">敬请关注博客,后期不断更新优质博文,谢谢</span> package leetcode.T018_ ...
- java出现次数最多的数_java如何找出一个int数组中出现次数最多
展开全部 其实这个问题,涉及到两个过程首先是统计数组中数字出现的次数,应该要有类32313133353236313431303231363533e78988e69d8331333365636666似& ...
最新文章
- spring报错NoClassDefFoundError等与第三方jar包导入问题
- 美国国会针对中国的网络间谍行动展开辩论
- 前端学习(1533):angular简介
- firefox应用自动全屏显示_【b】—自动化测试:基础selenium—API
- Java 文件操作一(写文件、按行读文件、删除文件、复制文件、追加数据、创建临时文件、修改最后修改日期、获取文件大小)
- Ansible指南,Raspberry Pi,Node.js,Python,Linux桌面等
- HLG 数字去重和排序II【二叉排序树】
- 使用Storyboard 创建ViewController
- RTSP的音频视频要各SETUP一次
- paip.刮刮卡砸金蛋抽奖概率算法跟核心流程.
- (转)NET Reflector简介
- ITN网络课程笔记(十一)
- MySQL Failover搭建
- cartographer探秘第三章之对比实验
- 去除VScode中的蓝色波浪线
- win10 电脑自带的便签在哪里
- pdf编辑软件哪个好
- python爬取疫情数据并存入excel中(包括国内各省份,全球,国内外历史疫情数据)代码可以直接运行
- html 悬浮菜单按钮,HTML右侧悬浮菜单
- JavaSE基础语法中的修饰符