Shuffle an Array

这题因为Python的随机模块里面就有shuffle函数,算是作弊了,另外毛子还用了sample取样也是一样的思路,如果真要自己实现shuffle,想到的办法还是随机取下标然后输出的办法

class Solution(object):

    def __init__(self, nums):
        """
        :type nums: List[int]
        """
        self.nums = nums
        self.tmp = nums[:]

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

    def shuffle(self):
        """
        Returns a random shuffling of the array.
        :rtype: List[int]
        """
        random.shuffle(self.tmp)
        return self.tmp


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

上面的方法纯粹靠Python的库函数取巧,真正实现随机打散的话,就是利用一个随机算法里面很常用的技巧,即随机选下标,然后加该下标的元素移到数组尾部同时减小随机范围,这样就能实现等概率打散数组

class Solution(object):

    def __init__(self, nums):
        """
        :type nums: List[int]
        """
        self.baseNums = nums
        self.n = len(nums)

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

    def shuffle(self):
        """
        Returns a random shuffling of the array.
        :rtype: List[int]
        """
        end = self.n
        result = []
        tmpNums = self.baseNums[:]
        for i in xrange(end):
            tmp = random.randint(0, end - i - 1)
            tmpNums[tmp], tmpNums[end - i - 1] = tmpNums[end - i - 1], tmpNums[tmp]
            result.append(tmpNums[end - i - 1])
        return result

results matching ""

    No results matching ""