初级-设计-shuffle an array(JavaScript)
打乱一个没有重复元素的数组。
示例:
// 以数字集合 1, 2 和 3 初始化数组。
int[] nums = {1,2,3};
Solution solution = new Solution(nums);
// 打乱数组 [1,2,3] 并返回结果。任何 [1,2,3]的排列返回的概率应该相同。
solution.shuffle();
// 重设数组到它的初始状态[1,2,3]。
solution.reset();
// 随机返回数组[1,2,3]打乱后的结果。
solution.shuffle();
思路:
在对象中保存原数组,调用reset方法时直接返回该原数组。
对于shuffle方法:
需要用到随机数Math.random(),这个随机数是0~1之间的数(不包括1),所以还要乘以数组长度才能表示数组的索引。设置标志数组,表示原数组中的对应元素是否被添加到shuffle数组中。当所有元素都添加完毕时,返回shuffle数组。
/**
* @param {number[]} nums
*/
var Solution = function(nums) {
this.nums = nums;
};
/**
* Resets the array to its original configuration and return it.
* @return {number[]}
*/
Solution.prototype.reset = function() {
return this.nums
};
/**
* Returns a random shuffling of the array.
* @return {number[]}
*/
Solution.prototype.shuffle = function() {
let shuffle = [];
let len = this.nums.length;
let nums = this.nums;
let indexArr = Array(len).fill(0); // 标记数组
while (shuffle.length < len) {
let index = parseInt(Math.random() * len);
if (indexArr[index] === 0) {
shuffle.push(nums[index])
indexArr[index] = 1
}
}
return shuffle;
};
/**
* Your Solution object will be instantiated and called as such:
* var obj = Object.create(Solution).createNew(nums)
* var param_1 = obj.reset()
* var param_2 = obj.shuffle()
*/