Python3实现旋转数组的3种算法

原创
ithorizon 7个月前 (10-03) 阅读数 122 #Python

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种算法:切片法、循环移动法和反转法。切片法最易懂,但也许不适用于所有场景;循环移动法通过逐个移动元素实现旋转;反转法通过反转数组中的元素实现旋转。在实际应用中,可以结合具体需求和场景选择合适的算法。


本文由IT视界版权所有,禁止未经同意的情况下转发

文章标签: Python


热门