力扣算法笔记——生成随机数组

题目信息: 给两个随机数和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();
    }

上一篇:浅谈RPC的实现原理与RPC实战-gRPC框架介绍


下一篇:Java中常见的异常类型