当前位置: 代码迷 >> 综合 >> 初级-设计-shuffle an array(JavaScript)
  详细解决方案

初级-设计-shuffle an array(JavaScript)

热度:99   发布时间:2023-12-17 08:22:07.0

打乱一个没有重复元素的数组。

示例:

// 以数字集合 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()*/

 

  相关解决方案