Python3实现旋转数组的3种算法
原创
引言
在编程中,旋转数组是一种常见的操作,其目的是将数组中的元素按照一定的规则进行移动。本文将介绍使用Python3实现旋转数组的3种算法,分别是:切片法、循环移动法和反转法。
1. 切片法
切片法是最易懂的一种旋转数组的方法,通过Python的切片操作来实现。具体代码如下:
def rotate_array_slice(arr, k):
n = len(arr)
k %= n # 若k大于数组长度,取余数
return arr[-k:] + arr[:-k]
# 示例
arr = [1, 2, 3, 4, 5, 6, 7]
k = 3
print(rotate_array_slice(arr, k)) # 输出:[5, 6, 7, 1, 2, 3, 4]
2. 循环移动法
循环移动法通过遍历数组元素,逐个移动到目标位置。具体代码如下:
def rotate_array_cyclic(arr, k):
n = len(arr)
k %= n # 若k大于数组长度,取余数
for _ in range(k):
temp = arr.pop()
arr.insert(0, temp)
# 示例
arr = [1, 2, 3, 4, 5, 6, 7]
k = 3
rotate_array_cyclic(arr, k)
print(arr) # 输出:[5, 6, 7, 1, 2, 3, 4]
3. 反转法
反转法是通过先将整个数组反转,然后将前k个元素和剩余的元素分别反转,从而实现旋转数组的目的。具体代码如下:
def reverse(arr, start, end):
while start < end:
arr[start], arr[end] = arr[end], arr[start]
start += 1
end -= 1
def rotate_array_reverse(arr, k):
n = len(arr)
k %= n # 若k大于数组长度,取余数
reverse(arr, 0, n-1) # 反转整个数组
reverse(arr, 0, k-1) # 反转前k个元素
reverse(arr, k, n-1) # 反转剩余元素
# 示例
arr = [1, 2, 3, 4, 5, 6, 7]
k = 3
rotate_array_reverse(arr, k)
print(arr) # 输出:[5, 6, 7, 1, 2, 3, 4]
总结
本文介绍了使用Python3实现旋转数组的3种算法:切片法、循环移动法和反转法。切片法最易懂,但也许不适用于所有场景;循环移动法通过逐个移动元素实现旋转;反转法通过反转数组中的元素实现旋转。在实际应用中,可以结合具体需求和场景选择合适的算法。