【LEETCODE】384- Shuffle an Array [Python]

本文介绍了一种用于随机打乱数组中元素顺序的算法,并详细解释了如何实现该算法。通过实例演示了如何在Python中使用随机数生成器来实现数组的洗牌功能,同时提供了完整的代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

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();

题意:

Given an array and shuffle it randomly when calling ‘shuffle’ function, and return original array when calling ‘reset’.

分析:

For ‘shuffle’ function, use i to walk through the array from beginning to end, for each i, randomly pick up a number behind i, and swap it with num[i].


There are many applications of shuffle in real life, like playing cards or listening to the music.

And basically there are 3 kinds of shuffle algorithms.
It depends on what kind of situation you want the array to be shuffled, you can shuffle the whole array every time, and you can also just pick up from the remaining numbers each time. You can build a new array to store the shuffle result, or you can rearrange the array in place.

You can have a look at the introduction about Fisher–Yates shuffle algorithm.

And here is the wonderful visualization of Fisher–Yates shuffle algorithm.

For more discussion.


Python:

random.randint(a, b)
Return a random integer N such that a <= N <= b.

import random
class Solution(object):

    def __init__(self, nums):
        """

        :type nums: List[int]
        :type size: int
        """
        self.origin = nums[:]
        self.output = nums

    def reset(self):
        """
        Resets the array to its original configuration and return it.
        :rtype: List[int]
        """
        return self.origin

    def shuffle(self):
        """
        Returns a random shuffling of the array.
        :rtype: List[int]
        """
        n = len(self.output)
        for i in range(n):
            j = random.randint(i,n-1)
            self.output[i], self.output[j] = self.output[j], self.output[i]
        return self.output



# Your Solution object will be instantiated and called as such:
# obj = Solution(nums)
# param_1 = obj.reset()
# param_2 = obj.shuffle()

Notice:
self.origin = nums[:]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值