算法分析与设计第十周:384. Shuffle an Array

来源:互联网 发布:淘宝客服介入会成功吗 编辑:程序博客网 时间:2024/05/23 16:54
class Solution(object):    def __init__(self, nums):        """        :type nums: List[int]        """        self.__l = nums        self.__size = len(nums)    def reset(self):        """        Resets the array to its original configuration and return it.        :rtype: List[int]        """        return self.__l    def shuffle(self):        randomSize = self.__size        cnt = 1        #res保存返回的数组        res = [0 for i in range(self.__size)]        #ableNum 保存尚可选择的数字        ableNum = [i for i in self.__l]        for i in range(self.__size):            pos = 0            #第一次有size个数字可以等概率选            #第二次有size - 1个数字可以等概率选、            #所以用递减的randomSize作为判断条件            while cnt <= randomSize:                num = random.randint(1,cnt) % cnt                #只剩一个数字可选时,直接添加                if randomSize == 1:                    res[i] = ableNum[0]                    break                #等概率选择                if num == 0:                    res[i] = ableNum[cnt - 1]                    pos = cnt - 1                cnt += 1            #删除已选的数字            del ableNum[pos]            cnt = 1            randomSize -= 1        return res    __l = []    __size = 0# Your Solution object will be instantiated and called as such:# obj = Solution(nums)# param_1 = obj.reset()# param_2 = obj.shuffle()
0 0
原创粉丝点击