384. Shuffle an Array

Updated: 2024-03-12
1 min read
[Array Medium]

LeetCode задача 384

Задача

Реализуйте класс, который принимает массив чисел в конструкторе и предоставляет метод для их случайного перемешивания, а также метод для возвращения исходного массива.

Подсказки

Для создания случайного порядка элементов можно использовать алгоритм Фишера-Йетса или другие методы перемешивания.

Подход

  1. Инициализация: Сохранить исходный массив в переменной класса для дальнейшего использования.
  2. reset(): Вернуть исходный массив.
  3. shuffle(): Вернуть перемешанный массив.

Из всех возможных подходов к решению этой задачи, наиболее простым является использование встроенного метода random.shuffle() из Python стандартной библиотеки для перемешивания массива. В этом случае, вы просто создаете копию исходного массива и применяете к ней метод random.shuffle().

Алгоритм

  1. Сохранить исходный массив в переменной класса.
  2. В методе reset() просто вернуть исходный массив.
  3. В методе shuffle() создать копию исходного массива, перемешать её и вернуть.

Решение

import random

class Solution:

    def __init__(self, nums):
        self.original = nums

    def reset(self):
        return self.original

    def shuffle(self):
        shuffled = self.original.copy()  # создаем копию исходного массива
        random.shuffle(shuffled)  # перемешиваем копию
        return shuffled