题目链接
英文链接:https://leetcode.com/problems/shuffle-an-array/
中文链接:https://leetcode-cn.com/problems/shuffle-an-array/
题目详述
打乱一个没有重复元素的数组。
示例:
1 | // 以数字集合 1, 2 和 3 初始化数组。 |
题目详解
- 为了重设数组到它的初始状态,需要单独用一个数组保存一个初始状态。用另一个复制的数组来打乱。问题的关键在于怎么打乱一个数组。
- 经典的 Fisher-Yates 洗牌算法可以打乱数组,它能保证等概率的生成全排列结果中的任意一种。从后往前遍历数组,每次随机生成一个区间下标,与当前下标的数进行交换(也可以从前后往后遍历,这时生成的随机值要加上对应的偏移量)。
1 | public class LeetCode_00384 { |