LeetCode 384. Shuffle an Array

Description

https://leetcode.com/problems/shuffle-an-array/

Shuffle a set of numbers without duplicates.

Example:

// Init an array with set 1, 2, and 3.
int[] nums = {1,2,3};
Solution solution = new Solution(nums);

// Shuffle the array [1,2,3] and return its result. Any permutation of [1,2,3] must equally likely to be returned.
solution.shuffle();

// Resets the array back to its original configuration [1,2,3].
solution.reset();

// Returns the random shuffling of array [1,2,3].
solution.shuffle();

Explanation

Randomly sets original elements new positions.

Python Solution

class Solution:

    def __init__(self, nums: List[int]):
        self.original_nums = nums

    def reset(self) -> List[int]:
        """
        Resets the array to its original configuration and return it.
        """
        return self.original_nums
       
    def shuffle(self) -> List[int]:
        """
        Returns a random shuffling of the array.
        """
        shuffle_nums = [0 for i in range(0, len(self.original_nums))]
        
        new_positions = set()
        
        for i in range(0, len(self.original_nums)):
            num = self.original_nums[i]

            new_position = randint(0, len(self.original_nums) - 1)
            while new_position in new_positions:
                new_position = randint(0, len(self.original_nums) - 1)
    
            new_positions.add(new_position)
            shuffle_nums[new_position] = num
    
        return shuffle_nums 


# Your Solution object will be instantiated and called as such:
# obj = Solution(nums)
# param_1 = obj.reset()
# param_2 = obj.shuffle()
  • Time complexity: O(n).
  • Space complexity: O(n).

2 Thoughts to “LeetCode 384. Shuffle an Array”

  1. Hi,

    I watched your youtube videos recently. They helped me a lot. Please keep producing Youtube videos.

    Cheers
    Jack

Leave a Reply to Jack Cancel reply

Your email address will not be published. Required fields are marked *