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()
算法分析与设计第十周:384. Shuffle an Array
最新推荐文章于 2019-10-05 18:13:52 发布