import random
def knuth_shuffle(arr):
n = len(arr)
for i in range(n - 1, 0, -1): # 从最后一个元素开始向前遍历
j = random.randint(0, i) # 随机选择一个元素与当前元素交换
arr[i], arr[j] = arr[j], arr[i] # 交换元素
return arr
# 示例使用
data = [1, 2, 3, 4, 5]
shuffled_data = knuth_shuffle(data)
print(shuffled_data)
leetcode 384
给你一个整数数组 nums
,设计算法来打乱一个没有重复元素的数组。
import random
class Solution:
def __init__(self, nums):
self.original_nums = nums[:]
self.nums = nums[:]
def reset(self):
# 重置数组到初始状态
self.nums = self.original_nums[:]
return self.nums
def shuffle(self):
# 使用Fisher-Yates洗牌算法打乱数组
for i in range(len(self.nums) - 1, 0, -1):
j = random.randint(0, i)
self.nums[i], self.nums[j] = self.nums[j], self.nums[i]
return self.nums
# 示例使用
# 初始化Solution对象
solution = Solution([1, 2, 3])
# 打乱数组
shuffled = solution.shuffle()
print("Shuffled array:", shuffled)
# 重置数组
reset = solution.reset()
print("Reset array:", reset)