网上找到一种更好的实现方式:

(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一种高性能算法,非递归)...相关推荐

  1. java长度为100的数组_产生一个int数组,长度为100,并向其中随机插入1-100,不重复...

    #define RANDOM(X) (rand() % X + 1) int main() { //标志数组 int book[] = {}; int result[] = {}; //默认的随机数种 ...

  2. 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复。

    产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复. int[] intArr=new int[100]; ArrayList myList=new ArrayList(); ...

  3. 产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复

    写在前面 前天去面试了,给出的笔试中有这样的一道算法题,产生一个int数组,长度为100,并向其中随机插入1-100,并且不能重复 当时,脑子一热,也没想那么多,就用集合实现了一下,经面试官提醒,发现 ...

  4. Scanner读取一个int数组

    Scanner读取一个int数组 因为有段时间用C,以为当sc.hasNextInt()这种输入检测遇到回车符时会返回false,哪知道sc.hasNextInt()会忽略忽略一切空白符(包含回车符) ...

  5. 判断一个int数组中的元素是否存在重复

    package com.hbut.test2; import java.util.ArrayList; import java.util.HashSet; import java.util.List; ...

  6. int java 声明_怎样用java定义一个int数组 C++ 怎么声明一个整型数组?

    导航:网站首页 > 怎样用java定义一个int数组 C++ 怎么声明一个整型数组? 怎样用java定义一个int数组 C++ 怎么声明一个整型数组? 相关问题: 匿名网友: int[] anA ...

  7. java定义int数组_怎样用java定义一个int数组

    展开全部 数组:是一组相关变量的集合数组是一组相关数据的集合,一个数组实际上就是32313133353236313431303231363533e4b893e5b19e31333363373731一连 ...

  8. leetcode:java.T018_4Sum---给定一个整数数组,找出a + b + c + d = target的唯一解,不能有重复元素组

    <span style="color:#ff4635">敬请关注博客,后期不断更新优质博文,谢谢</span> package leetcode.T018_ ...

  9. java出现次数最多的数_java如何找出一个int数组中出现次数最多

    展开全部 其实这个问题,涉及到两个过程首先是统计数组中数字出现的次数,应该要有类32313133353236313431303231363533e78988e69d8331333365636666似& ...

最新文章

  1. spring报错NoClassDefFoundError等与第三方jar包导入问题
  2. 美国国会针对中国的网络间谍行动展开辩论
  3. 前端学习(1533):angular简介
  4. firefox应用自动全屏显示_【b】—自动化测试:基础selenium—API
  5. Java 文件操作一(写文件、按行读文件、删除文件、复制文件、追加数据、创建临时文件、修改最后修改日期、获取文件大小)
  6. Ansible指南,Raspberry Pi,Node.js,Python,Linux桌面等
  7. HLG 数字去重和排序II【二叉排序树】
  8. 使用Storyboard 创建ViewController
  9. RTSP的音频视频要各SETUP一次
  10. paip.刮刮卡砸金蛋抽奖概率算法跟核心流程.
  11. (转)NET Reflector简介
  12. ITN网络课程笔记(十一)
  13. MySQL Failover搭建
  14. cartographer探秘第三章之对比实验
  15. 去除VScode中的蓝色波浪线
  16. win10 电脑自带的便签在哪里
  17. pdf编辑软件哪个好
  18. python爬取疫情数据并存入excel中(包括国内各省份,全球,国内外历史疫情数据)代码可以直接运行
  19. html 悬浮菜单按钮,HTML右侧悬浮菜单
  20. JavaSE基础语法中的修饰符

热门文章

  1. UEStudio20中文版
  2. 【理论】红黑树的实现原理
  3. 修改Eclipse中项目在Apache Tomcat中的部署路径
  4. phpstuday 修改网站访问目录
  5. DFS(二):骑士游历问题
  6. Python 3.x print 小结
  7. FreeBSD Top States
  8. C# indexof和indexofany区别(转)
  9. PL/SQL Developer中,存储过程无法调试的问题解决办法
  10. Flash Communication Server笔记一