随机获取指定范围内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日)的整数偏移量来保存(即把日期保存为一个数字); * 因此可通过寻找‘指定日期’与‘关键日期’相对应的整数偏移量,再加一个指定范围内的随机整数 ...
随机推荐
- Word操作总结
1.竖向选择 Notepad中:先把鼠标光标放在起始位置,然后同时按 Alt+Ctrl 或Alt+shift键,然后移动鼠标选取内容. Word中只能用Alt+Shift .
- visual box 安装 centos7后,无法上网
ifconfig 命令后,只看到个回环网卡: 进入 /etc/sysconfig/network-scripts后,发现有设备 visual box 中设置为“桥接网卡”,也没问题,最后把控制芯片改 ...
- [翻译] JHChainableAnimations
JHChainableAnimations - (void)animationType_01 { /* * 缩放到0.8倍(执行spring动画效果的缩放)持续时间0.5s,完成了之后移动100的距离 ...
- 网站url常见报错
报错情况比较复杂,此处列出比较常见的几种报错内容: 报错: 报错是一个大类, 的报错基本上是权限问题,出现 报错时您需要检测权限配置问题. 403.1 错误是由于“执行”访问被禁止而造成的.若试图从目 ...
- 沉淀,再出发:Django的简单使用
沉淀,再出发:Django的简单使用 一.前言 在学习了python的基础语法之后,其实大家都很怀疑python的使用场景,其实python在很多场合都有很强的适应性,就比如说web开发之中使 ...
- January 11 2017 Week 2nd Wednesday
One always has time enough, if one will apply it well. 如果你能好好地利用,你总有足够的时间. If you always feel that y ...
- OC继承
1.成员访问类型 private:私有成员,不能被外部函数访问(使用),也不能被子类继承: protected:保护成员,不能被外部函数访问,可以被子类继承: public:公有成员,可以被外部函数访 ...
- [Assignment] C++2
作业要求:PAT1025 翻转链表 代码在这里
- scala基础入门
1.scala当中申明值和变量 scala当中的变量申明可以使用两种方式,第一种使用val来申明变量.第二种使用var来申明变量. 申明变量语法 val/var 变量名 [:变量类型] = 变量值 其 ...
- js oc与线程
分属不同的线程 //定义需要暴露给js的内容,这里我们只暴露personName和queryPersonName接口 @protocol PersonProtocol <JSExport> ...