You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
/** * @param {number[]} nums */varSolution=function(nums){this.originNums=[...nums];this.shuffleNums=[...nums];};/** * Resets the array to its original configuration and return it. * @return {number[]} */Solution.prototype.reset=function(){returnthis.originNums;};/** * Returns a random shuffling of the array. * @return {number[]} */Solution.prototype.shuffle=function(){const{ shuffleNums }=this;letcurrent=shuffleNums.length-1;while(current>-1){// 生成一个范围在当前下标到数组末尾元素下标之间的随机整数constrandom=Math.floor(shuffleNums.length*Math.random());// 将当前元素和随机选出的下标所指的元素互相交换 [shuffleNums[current],shuffleNums[random]]=[shuffleNums[random],shuffleNums[current]];current--;}returnshuffleNums;};/** * Your Solution object will be instantiated and called as such: * var obj = new Solution(nums) * var param_1 = obj.reset() * var param_2 = obj.shuffle() */
题目描述
打乱一个没有重复元素的数组。
示例:
思路
洗牌算法:
从最后一个元素开始,从数组中随机选出一个位置,交换,直到第一个元素。
重置
,原始数组必须得保存一份。拓展题目
实现随机抽奖程序 接受一个数组 arr, n , 从数组中抽出n个人
思路一:
按照我们正常的抽奖的最简单做法,一般是把工号写到一个球上面,摇 n 次,然后每次摇出1个号,该号码即为中奖号码,同时将该球拿出去,重复 n 次。
思路二:
还有一种思路是将数组打乱,直接截取 前 n 个数。就是著名的 洗牌算法。
打乱数组(洗牌算法):从最后一个元素开始,从数组中随机选出一个位置,交换,直到第一个元素。
推荐阅读
The text was updated successfully, but these errors were encountered: