Shuffle an Array
Problem statement
Given an integer array nums, design an algorithm to randomly shuffle the array. All permutations of the array should be equally likely as a result of the shuffling.
Implement the Solution class:
Solution(int[] nums)Initializes the object with the integer arraynums.int[] reset()Resets the array to its original configuration and returns it.int[] shuffle()Returns a random shuffling of the array.
Example 1:
Input["Solution", "shuffle", "reset", "shuffle"][[[1, 2, 3]], [], [], []]Output[null, [3, 1, 2], [1, 2, 3], [1, 3, 2]]ExplanationSolution solution = new Solution([1, 2, 3]);solution.shuffle(); // Shuffle the array [1,2,3] and return its result. // Any permutation of [1,2,3] must be equally likely to be returned. // Example: return [3, 1, 2]solution.reset(); // Resets the array back to its original configuration [1,2,3]. Return [1, 2, 3]solution.shuffle(); // Returns the random shuffling of array [1,2,3]. Example: return [1, 3, 2]
Constraints:
1 <= nums.length <= 200-106 <= nums[i] <= 106- All the elements of
numsare unique. - At most
5 * 104calls in total will be made toresetandshuffle.
My solution
/**
* @param {number[]} nums
*/
var Solution = function(nums) {
this.nums = [...nums]
this._original = [...nums]
};
/**
* Resets the array to its original configuration and return it.
* @return {number[]}
*/
Solution.prototype.reset = function() {
this.nums = [...this._original]
return this.nums;
};
/**
* Returns a random shuffling of the array.
* @return {number[]}
*/
Solution.prototype.shuffle = function() {
const currentArr = [...this.nums];
for (let i = 0, j = currentArr.length; i < currentArr.length, i < j; i++) {
const idx = Math.floor(Math.random() * j)
// console.log(idx)
const tmp = currentArr[idx];
currentArr[idx] = currentArr[i]
currentArr[i] = tmp;
// [currentArr[idx], currentArr[i]] = [currentArr[i], currentArr[idx]]
}
this.nums = [...currentArr]
return this.nums;
};
/**
* 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()
*/