384 打乱数组 (洗牌算法)

在这里插入图片描述
在这里插入图片描述
   数组洗牌是指将一个数组的元素顺序打乱,随机重新排列。算法的实现思路如下:从还没处理的数组(假设还剩下(n-i)个元素),随机产生一个[0,n-i)之间的数p,从剩下的k个数中把第p个数取出。直到把数字全部取完。

public int[] shuffle() {
    
    
        int[] ans = nums.clone();
        for (int i = 0; i < n; i++) {
    
    
            swap(ans, i, i + random.nextInt(n - i));
        }
        return ans;
    }
    void swap(int[] arr, int i, int j) {
    
    
        int c = arr[i];
        arr[i] = arr[j];
        arr[j] = c;
    }

   上边的代码表示先将nums数组克隆到ans中,从下标0开始,将数组下标为i和数组下标为i + random.nextInt(n - i)的数进行交换。这样最后得到的数组就是随机排列的数组。

猜你喜欢

转载自blog.csdn.net/weixin_51656756/article/details/121471398