打乱数组

题解方法

  • Fisher-Yates 洗牌算法

Fisher-Yates 洗牌算法

  • 对于下标 x 而言,从 [x, n - 1] 中随机出一个位置与 x 进行值交换,当所有位置都进行这样的处理后,便得到一个公平的洗牌方案

核心代码

Fisher-Yates 洗牌算法

1
2
3
4
5
6
7
8
9
10
11
12
13
public int[] shuffle() {
int[] res = nums.clone();
int n = res.length;

for (int i = 0; i < n; i++) {
int j = i + random.nextInt(n - i);

int tmp = res[i];
res[i] = res[j];
res[j] = tmp;
}
return res;
}

题目来源

384. 打乱数组 - 力扣(LeetCode) (leetcode-cn.com)