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

 

全部评论

相关推荐

2025-12-17 17:15
华东师范大学 运营
点赞 评论 收藏
分享
2025-12-29 20:37
已编辑
清华大学附属小学 Java
哇哇的菜鸡oc:1.为什么要写这么多内容呀 2.什么叫做简历 3.什么样的内容可以写到简历上 4.项目可以包装,但是要有理有据呀,不能乱包装呀,比如 跨境能达到日均120万订单的在国内都是能叫的上名字的,而且这些工作也基本上不太会交给一个实习生去做 建议友友可以去网上或者找同学的简历看看,他们的简历是怎么写的,去找找上面的那四个问题的答案吧,然后要记住的是Java是服务于业务的,而不是服务于微服务或者技术的
最后再改一次简历
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务