面试题:产生一个长度为100的数组,为数组中的每一项随机填充1-100之间的数并且保证不重复

简介:

这是一道面试题:

参考网上3种方法,C#实现:

方法一:

#region 方法一 //存放1-100个数 int[] num = new int[100]; //indexNum[0]=1;...indexNum[99]=100;(不重复) for (int i = 0; i < num.Length; i++) { num[i] = i + 1; } Random r = new Random(); //存放最终结果 int[] result = new int[100]; int max = 100;//设置随机数最大值 for (int j = 0; j < result.Length; j++) { //计算出随机产生的数组索引(0-99) 注:上界值:100 无法取到 int index = r.Next(0, max); //取出该索引位置所存的数 result[j] = num[index]; //用最后一个数替换掉已被放入result中的数 //这样num数组中从0到max-1又都是未被存放入result而且不重复的数了 num[index] = num[max - 1]; //随机产生的数组索引最大值减一 max--; } //打印结果 for (int i = 0; i < 100; i++) { if (i % 10 == 0) { Console.WriteLine("/r/n"); } Console.Write(result[i] + " "); } Console.Read(); #endregion

方法二:

Dictionary<int, int> result = new Dictionary<int, int>(); Random r = new Random((int)DateTime.Now.Ticks); int temp; for (int i = 0; i < 100; i++) { do { temp = r.Next(1, 101); } while (result.ContainsValue(temp)); result.Add(i, temp); } foreach (var item in result) { if (item.Key % 10 == 0) { Console.WriteLine("/r/n"); } Console.Write(item.Value + " "); } Console.Read(); #endregion

方法三:

int[] num = new int[100]; int temp; Random r = new Random(); for (int i = 0; i < 100; i++) { temp = r.Next(1, 101); num[i]=GetNumber(num, i, 1, 101, temp,r); } for (int i = 0; i < num.Length; i++) { if (i%10==0) { Console.Write("/r/n"); } Console.Write(num[i] + " "); } Console.Read();

GetNumber:

/// <summary> /// 递归对比重复值 /// </summary> static int GetNumber(int[] a, int index, int minValue, int maxValue, int temp, Random r) { for (int i = 0; i < index; i++) { if (a[i] == temp) { int newTemp = r.Next(minValue, maxValue); a[index] = newTemp; return GetNumber(a, index, minValue, maxValue, newTemp, r); } } return temp; }

至于效率,也应该是从一到三,逐个递减吧。



原文发布时间为:2011-03-16


本文作者:vinoYang


本文来自云栖社区合作伙伴CSDN博客,了解相关信息可以关注CSDN博客。

目录
相关文章
|
3月前
|
C语言
【Amazon 面试题1】一个数组,里面得数出现的次数是偶数次,只有一个数出现的次数是奇数次,找出那个出现奇数次的数
本文介绍了解决Amazon面试题的一种方法,即在一个所有数字出现次数都是偶数,除了一个数字出现奇数次的数组中,利用异或运算的性质找出出现奇数次的数字,并提供了C语言实现的代码示例。
67 1
|
3月前
|
Java
Java 基础语法-面试题(54-63道)(数组+类+包)
Java 基础语法-面试题(54-63道)(数组+类+包)
45 16
|
4月前
|
存储 算法
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
|
5月前
|
开发框架 .NET
技术好文共享:面试题:找出数组中只出现一次的2个数(异或的巧妙应用)(出现3次)
技术好文共享:面试题:找出数组中只出现一次的2个数(异或的巧妙应用)(出现3次)
|
5月前
|
数据采集 算法 数据挖掘
LeetCode 题目 80:删除排序数组中的重复项 II【算法面试高频题】
LeetCode 题目 80:删除排序数组中的重复项 II【算法面试高频题】
|
6月前
|
C++
【一刷《剑指Offer》】面试题 14:调整数组顺序使奇数位于偶数前面
【一刷《剑指Offer》】面试题 14:调整数组顺序使奇数位于偶数前面
|
6月前
|
算法 C++
【一刷《剑指Offer》】面试题 8:旋转数组的最小数字
【一刷《剑指Offer》】面试题 8:旋转数组的最小数字
|
6月前
|
JavaScript 前端开发 索引
经典面试题数组常用的方法
### 1.数组常用方法之 push()(==改变原数组,产生新数组==) - `push` 是用来在数组的末尾追加一个元素,返回添加以后的长度 ```javascript var arr = [1, 2, 3] // 使用 push 方法追加一个元素在末尾 arr.push(4) console.log(arr) // [1, 2, 3, 4] var res = arr.push(1,2,3,34); res//8 ``` ### 2.数组常用方法之 pop()(==改变原数组,产生新数组==) - `po
68 1
|
6月前
|
机器学习/深度学习 算法
【力扣经典面试题】189. 轮转数组
【力扣经典面试题】189. 轮转数组
|
6月前
|
算法 C++ 索引
【力扣经典面试题】238. 除自身以外数组的乘积
【力扣经典面试题】238. 除自身以外数组的乘积