← Назад к вопросам

Разворот массива

1.7 Middle🔥 171 комментариев
#Теория тестирования

Условие

Напишите метод, который принимает массив целых чисел и возвращает его в обратном порядке (первый элемент заменяет последний и так далее).

Пример

Вход: [1, 2, 3, 4, 5] Выход: [5, 4, 3, 2, 1]

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Решение: Разворот массива

Описание задачи

Требуется реализовать метод, который принимает массив целых чисел и возвращает его в полностью обратном порядке. Первый элемент становится последним, второй — предпоследним, и так далее. Данная операция часто называется разворотом массива (array reversal) и является фундаментальным алгоритмом в программировании.

Решение на Python

def reverse_array(arr):
    """
    Разворачивает массив целых чисел в обратном порядке.
    
    Args:
        arr: список целых чисел
    
    Returns:
        список целых чисел в обратном порядке
    """
    return arr[::-1]

Альтернативные подходы

1. Встроенный метод reverse()

def reverse_array(arr):
    # Изменяет массив на месте и возвращает None,
    # поэтому нужно вернуть копию
    arr_copy = arr.copy()
    arr_copy.reverse()
    return arr_copy

2. Использование двух указателей

def reverse_array(arr):
    """
    Разворот с использованием двух указателей (левый и правый).
    Временная сложность O(n), пространственная O(n).
    """
    left, right = 0, len(arr) - 1
    result = arr.copy()
    
    while left < right:
        result[left], result[right] = result[right], result[left]
        left += 1
        right -= 1
    
    return result

3. Рекурсивный подход

def reverse_array(arr, start=0, end=None):
    """
    Рекурсивный разворот массива.
    """
    if end is None:
        end = len(arr) - 1
    
    if start >= end:
        return arr
    
    arr[start], arr[end] = arr[end], arr[start]
    return reverse_array(arr, start + 1, end - 1)

Тестовые примеры

import unittest

class TestReverseArray(unittest.TestCase):
    
    def test_basic_reverse(self):
        # Базовый случай из условия
        assert reverse_array([1, 2, 3, 4, 5]) == [5, 4, 3, 2, 1]
    
    def test_single_element(self):
        # Массив с одним элементом
        assert reverse_array([42]) == [42]
    
    def test_two_elements(self):
        # Массив с двумя элементами
        assert reverse_array([1, 2]) == [2, 1]
    
    def test_empty_array(self):
        # Пустой массив
        assert reverse_array([]) == []
    
    def test_negative_numbers(self):
        # Массив с отрицательными числами
        assert reverse_array([-1, -2, -3, 0]) == [0, -3, -2, -1]
    
    def test_duplicates(self):
        # Массив с дубликатами
        assert reverse_array([1, 1, 2, 2, 3]) == [3, 2, 2, 1, 1]

if __name__ == __main__:
    unittest.main()

Анализ сложности

ПодходВременная сложностьПространственная сложность
Слайсинг [::-1]O(n)O(n)
Метод reverse()O(n)O(n)
Два указателяO(n)O(n)
РекурсияO(n)O(n) стек вызовов

Рекомендация

Для практического использования в тестировании и в большинстве случаев рекомендуется использовать слайсинг [::-1], так как это:

  • Самое краткое и читаемое решение
  • Идиоматичное для Python
  • Производительное благодаря оптимизациям интерпретатора
  • Безопасное — не изменяет исходный массив

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

Разворот массива | PrepBro