TGViewer
Python | LeetCode Python | LeetCode @easy_python_task · 9.04K subscribers
Post #2398 702
Задача: 384. Shuffle an Array
Сложность: medium

Дан целочисленный массив nums. Разработайте алгоритм для случайного перемешивания массива. Все перестановки массива должны быть равновероятны в результате перемешивания.

Реализуйте класс Solution:

Solution(int[] nums): Инициализирует объект целочисленным массивом nums.
int[] reset(): Сбрасывает массив в его исходную конфигурацию и возвращает его.
int[] shuffle(): Возвращает случайное перемешивание массива.

Пример:
Input: ransomNote = "a", magazine = "b"
Output: false


👨‍💻 Алгоритм:

1⃣Алгоритм Фишера-Йейтса удивительно похож на решение грубой силы. На каждой итерации алгоритма мы генерируем случайное целое число между текущим индексом и последним индексом массива.

2⃣Затем мы меняем местами элементы на текущем индексе и выбранном индексе. Это симулирует выбор (и удаление) элемента из "шляпы", так как следующий диапазон, из которого мы выбираем случайный индекс, не будет включать последний обработанный элемент.

3⃣Один небольшой, но важный момент заключается в том, что возможно поменять элемент сам с собой - в противном случае некоторые перестановки массива были бы более вероятны, чем другие.

😎 Решение:
import random

class Solution:
def __init__(self, nums: list[int]):
self.array = nums[:]
self.original = nums[:]

def reset(self) -> list[int]:
self.array = self.original[:]
return self.original

def shuffle(self) -> list[int]:
for i in range(len(self.array)):
rand_index = random.randint(i, len(self.array) - 1)
self.array[i], self.array[rand_index] = self.array[rand_index], self.array[i]
return self.array


Ставь 👍 и забирай 📚 Базу знаний
More from @easy_python_task
  1. Oct 9, 2026Post #2433
  2. Oct 7, 2026🔥 Скрытые вакансии с удаленной работой для Python разработчика, которые нигде больше не п…
  3. Oct 4, 2026Задача: 958. Check Completeness of a Binary Tree Сложность: medium Дан корень бинарного де…
  4. Oct 4, 2026Задача: 949. Largest Time for Given Digits Сложность: medium Учитывая массив arr из 4 цифр…
  5. Oct 3, 2026Задача: 1312. Minimum Insertion Steps to Make a String Palindrome Сложность: hard Дана стр…
  6. Oct 2, 2026Задача: 1103. Distribute Candies to People Сложность: easy Мы распределяем некоторое колич…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →