Leetcode-384-Shuffle an Array

打乱顺序的最好方法就是,random一个准备要交换的顺序编号,然后逐个进行交换。

img

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
class Solution(object):

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

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

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

return self.now

本题主要是实现相同概率打乱数组的算法, 其实在python中的random.shuffle()中就可以实现随机打乱数组的功能

这里需要注意的是random库中每一个方法的取值范围有所区别

random() - 随机返回的是[0,1)的浮点数

randint(1,10) -随机返回[1,10]之间的整数

uniform(1,10) - 随机返回[1,10]之间的浮点数

randrange(1, 100, 2) -随机返回[1, 100)之间的偶数

choice(seq) - 随机返回seq中的一个元素

shuffle(seq) - 随机打乱元seq的顺序

sample(seq ,k) -随机在seq中选取k个元素,不改变原来seq的顺序