随机获取指定范围内N个不重复数字
/// <summary>
/// 随机获取指定范围内N个不重复数字
/// </summary>
/// <param name="min">指定范围最小值</param>
/// <param name="max">指定范围最大值</param>
/// <param name="num">不重复数字的个数</param>
/// <returns></returns>
private int[] NonRepeatingRandomNumbers(int min, int max, int num)
{
int len = max - min + 1;
if (min > max || len < 0 || num < 0 || num > len)
{
throw new Exception("输入参数错误");
}
int[] numbers = new int[len];
for (int i = min; i <= max; i++)
{
numbers[i - min] = i;
}
int[] result = new int[num];
for (int i = 0; i < num; i++)
{
Random random = new Random();
int index = random.Next(0, --len);
result[i] = numbers[index];
numbers[index] = numbers[len];
}
return result;
}
代码解读
- 数据源(numbers):存储用户输入最小值(包含)和最大值(包含)之间的连续自然数
- 目标数组(result):存储最终需要返回的不重复数字
- 数据源数组长度(len):通过计算得出数据源的数组长度,以便初始化数组,存储数据源
- 核心循环:
4.1 从[0,len-1]范围内随机获取下标,并取值放到目标数组内,同时将获取到的元素替换为len-1位置的元素;
4.2 然后从[0,len-2]范围内随机获取下标,并取值放置到目标数组中,同时将获取到的元素替换为len-2位置的元素;
4.3 以此类推直到满足目标数组元素的个数为止;
分析
- 算法的时间复杂度为O(N)
随机获取指定范围内N个不重复数字的更多相关文章
- 随机指定范围内N个不重复的数
此为工具类,支持抽奖业务需求,具体实现见下方代码: package com.org.test; import java.util.ArrayList; import java.util.List; p ...
- Django Models随机获取指定数量数据方法
方法一:新增models的Manager方法 下面就直接发代码了 class RandomManager(models.Manager): def get_queryset(self): return ...
- python获取指定时间段内的随机不重复的时间点
上篇 <python时间时分秒与秒数的互相转换>http://www.cnblogs.com/gayhub/p/6154707.html 提到了把时间转成秒数的方法, 这篇写写转换成秒数后 ...
- 【前端】JavaScript获取指定范围内的随机整数
function getRandomIntNumber(min, max) { var span = max - min + 1; var result = Math.floor(Math.rando ...
- SQL Server中获取指定时间段内的所有月份
例如查询 2012-1-5 到 2012-11-3 之间所有的月份 declare @begin datetime,@end datetime set @begin='2012-1-5' set @e ...
- SQL Server中获取指定时间段内的所有日期
DECLARE @days INT, @date_start DATETIME = '2016-11-01', @date_end DATETIME = '2016-11-10' SET @days ...
- JS生成指定范围内的随机数(支持随机小数)
直接需要函数的话,直接到文章的最后面找. ============================================================= 转载:https://www.cn ...
- Java产生指定范围内的随机日期
要想产生指定范围内的随机日期,首先我们要指定一个范围,那么我们可以通过SImpleDateFormat格式化日期,然后再通过parse()方法设置日期,返回一个Date类型的日期对象,再转化为时间戳( ...
- Oracle 生成指定范围内随机日期
Oracle生成一个指定范围内的随机日期 /* 年1月1日)的整数偏移量来保存(即把日期保存为一个数字); * 因此可通过寻找‘指定日期’与‘关键日期’相对应的整数偏移量,再加一个指定范围内的随机整数 ...
随机推荐
- 地图的平移、缩放的实现(android版)
一.平移地图 移动地图的原理是利用手指在屏幕上拖动的距离,转换为在地图上距离,把地图坐标加上偏移的距离实现地图移动. 由于地图是绘制到Bitmap上的,所以地图移动和缩放的过程只要改变Bitmap的矩 ...
- C#代码处理网页关于登录的code
作者:血饮狂龙链接:https://www.zhihu.com/question/49452639/answer/117294801来源:知乎著作权归作者所有,转载请联系作者获得授权. private ...
- centos下安装ipython(minglnghang命令行)
下载文件 wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate 执行安装 python get-pip.py 这就安装好了 ...
- Attribute+Reflection,提高代码重用
这篇文章两个目的,一是开阔设计的思路,二是实例代码可以拿来就用. 设计的思路来源于<Effective c#>第一版Item 24: 优先使用声明式编程而不是命令式编程.特别的地方是,希望 ...
- [翻译] KYCircularProgress
KYCircularProgress Flexible progress bar written in Swift. 用Swift语言编写的灵活的进度条控件. Features Gradation C ...
- 为exchange 2010 owa 添加验证码
微软给了exchange owa页面加固的方案,如有需要,请查看. https://partnersupport.microsoft.com/zh-hans/par_servplat/forum/pa ...
- Python学习---抽屉框架分析[点赞功能分析]
实际上就是多了一个隐藏的span标签,内容是+1,配合setInterval实现的动态效果 settings.py INSTALLED_APPS = [ ... 'app01', # 注册app ] ...
- Python学习---Django的验证码
[更多参考] http://www.cnblogs.com/wupeiqi/articles/4786251.html
- December 16th 2016 Week 51st Friday
My life is a straight line, turning only for you. 我的人生是一条直线,转弯只是为了你. My life is a straight line that ...
- LoadRunner 测试Socket接口函数说明
lrs_save_param_ex是lrs_save_param的扩展函数,包含了lrs_save_param的基本功能.其函数语法结构如下: int lrs_save_param_ex ( char ...