初级-设计-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()
 */

 

全部评论

相关推荐

头像
03-18 09:09
Java
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务