旋转数组是一种常见的数组操作,它将数组的元素按照一定的规则进行旋转。以下是Python中实现旋转数组的3种算法:
- 切片法
切片法是一种简单的方法,它通过切片操作将数组的元素旋转。具体来说,将数组的后k个元素切片并拼接到数组的前面即可。
def rotate_array(nums, k):
k %= len(nums)
nums[:] = nums[-k:] + nums[:-k]
- 反转法
反转法是一种常用的方法,它通过反转数组的元素来实现旋转。具体来说,先将整个数组反转,再将前k个元素反转,最后将后n-k个元素反转即可。
def rotate_array(nums, k):
k %= len(nums)
nums.reverse()
nums[:k] = reversed(nums[:k])
nums[k:] = reversed(nums[k:])
- 循环交换法
循环交换法是一种常见的方法,它通过循环交换数组的元素来实现旋转。具体来说,每次将数组的后k个元素往前移动,并将前面的元素往后移动,直到数组的所有元素都被移动。
def rotate_array(nums, k):
k %= len(nums)
count = 0
start = 0
while count < len(nums):
current = start
prev = nums[start]
while True:
next_idx = (current + k) % len(nums)
nums[next_idx], prev = prev, nums[next_idx]
current = next_idx
count += 1
if start == current:
break
start += 1
以上是Python中实现旋转数组的3种算法,每种算法都有其优缺点,根据具体情况选择合适的算法。