384. Shuffle An Array¶
Difficulty: Medium
LeetCode Problem View on GitHub
384. Shuffle an Array
Medium
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]]
Explanation
Solution 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 <= 50-106 <= nums[i] <= 106- All the elements of
numsare unique. - At most
104calls in total will be made toresetandshuffle.
Solution¶
class Solution {
private int original[];
private int shuffled[];
public Solution(int[] nums) {
original = new int[nums.length];
shuffled = new int[nums.length];
for (int i = 0; i < nums.length; i++) {
original[i] = nums[i];
shuffled[i] = nums[i];
}
}
public int[] reset() {
return original;
}
public int[] shuffle() {
ArrayList<Integer> temp = new ArrayList<>();
for (int ele : shuffled) temp.add(ele);
Collections.shuffle(temp);
for (int i = 0; i < temp.size(); i++) shuffled[i] = temp.get(i);
return shuffled;
}
}
/**
* Your Solution object will be instantiated and called as such:
* Solution obj = new Solution(nums);
* int[] param_1 = obj.reset();
* int[] param_2 = obj.shuffle();
*/
Complexity Analysis¶
- Time Complexity:
O(?) - Space Complexity:
O(?)
Approach¶
Detailed explanation of the approach will be added here