Ротация массивов — распространенная проблема на собеседованиях по программированию и соревнованиях по программированию. Он предполагает сдвиг элементов массива вправо или влево на заданное количество позиций. В этой статье блога мы рассмотрим различные методы эффективного вращения массива, сосредоточив внимание на решениях 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. Мы обсудили использование дополнительного пространства, обращение подмассивов и циклические замены. Каждый метод имеет свои преимущества и может применяться в зависимости от конкретных требований задачи. Поняв и внедрив эти методы, вы будете хорошо подготовлены к решению задач ротации массивов на собеседованиях и соревнованиях по программированию.
Не забывайте практиковать эти методы и экспериментировать с различными тестовыми примерами, чтобы углубить свое понимание. Приятного кодирования!