Эффективные методы вращения массива: решения LeetCode

Ротация массивов — распространенная проблема на собеседованиях по программированию и соревнованиях по программированию. Он предполагает сдвиг элементов массива вправо или влево на заданное количество позиций. В этой статье блога мы рассмотрим различные методы эффективного вращения массива, сосредоточив внимание на решениях LeetCode. Мы предоставим примеры кода для каждого метода, чтобы помочь вам понять и эффективно их реализовать.

Метод 1: использование дополнительного пространства
Этот метод предполагает создание нового массива и копирование в него повернутых элементов. Вот пример использования Python:

def rotate_array(nums, k):
    n = len(nums)
    rotated = [None] * n
    for i in range(n):
        rotated[(i + k) % n] = nums[i]
    return rotated
# Example usage
nums = [1, 2, 3, 4, 5]
k = 3
result = rotate_array(nums, k)
print(result)  # Output: [3, 4, 5, 1, 2]

Метод 2: переворачивание подмассивов
Этот метод включает в себя переворачивание подмассивов для достижения эффекта вращения. Вот пример использования Python:

def rotate_array(nums, k):
    n = len(nums)
    k = k % n
    reverse(nums, 0, n - 1)
    reverse(nums, 0, k - 1)
    reverse(nums, k, n - 1)
def reverse(nums, start, end):
    while start < end:
        nums[start], nums[end] = nums[end], nums[start]
        start += 1
        end -= 1
# Example usage
nums = [1, 2, 3, 4, 5]
k = 3
rotate_array(nums, k)
print(nums)  # Output: [3, 4, 5, 1, 2]

Метод 3: использование циклических замен
Этот метод предполагает циклическую замену элементов для достижения эффекта вращения. Вот пример использования Python:

def rotate_array(nums, k):
    n = len(nums)
    k = k % n
    count = 0
    start = 0
    while count < n:
        current = start
        prev = nums[start]
        while True:
            next_idx = (current + k) % n
            nums[next_idx], prev = prev, nums[next_idx]
            current = next_idx
            count += 1
            if start == current:
                break
        start += 1
# Example usage
nums = [1, 2, 3, 4, 5]
k = 3
rotate_array(nums, k)
print(nums)  # Output: [3, 4, 5, 1, 2]

В этой статье мы рассмотрели три эффективных метода поворота массива, сосредоточив внимание на решениях LeetCode. Мы обсудили использование дополнительного пространства, обращение подмассивов и циклические замены. Каждый метод имеет свои преимущества и может применяться в зависимости от конкретных требований задачи. Поняв и внедрив эти методы, вы будете хорошо подготовлены к решению задач ротации массивов на собеседованиях и соревнованиях по программированию.

Не забывайте практиковать эти методы и экспериментировать с различными тестовыми примерами, чтобы углубить свое понимание. Приятного кодирования!