题目信息: 给两个随机数和N,生成M到N的随机不重复数组,且M<N。
示例:输入M =2, N=5, 输出 [4,3,2,5].
思路:洗牌算法,先遍历M到N之间所有的数字,将得到的结果存入一个集合中,将集合从后往前遍历,遍历时,在0和当前遍历到的列表最后一个下标i之间选择一个随机数J(从0到i),将随机数J下标对应的数字跟当前遍历到的下标i对换位置,打乱列表顺序
我直接在Unity里写了,代码如下:
public int M;
public int N;
public int[] randomArray;
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
randomArray=GenerateRandomArray(M,N);
}
}
int[] GenerateRandomArray(int m,int n)
{
if (n<=m)
{
return new int[0];
}
List<int> numbers = new List<int>();
for (int i=m;i<=n;i++)
{
numbers.Add(i);
}
for (int i=numbers.Count-1;i>0;i--)
{
int j = Random.Range(0,i+1);
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
return numbers.ToArray();
}