Python 数组循环左移算法:O(n) 时间复杂度和 O(1) 空间复杂度
Python 数组循环左移算法:O(n) 时间复杂度和 O(1) 空间复杂度
将一个具有 n 个元素的数组 A[n] 向左循环移动 k 个位置,要求时间复杂度为 O(n), 空间复杂度为 O(1)。
代码如下:
def rotate_array(arr, k):
n = len(arr)
k = k % n # 处理 k 大于 n 的情况
reverse(arr, 0, k - 1)
reverse(arr, k, n - 1)
reverse(arr, 0, n - 1)
def reverse(arr, start, end):
while start < end:
arr[start], arr[end] = arr[end], arr[start]
start += 1
end -= 1
# 测试
arr = [1, 2, 3, 4, 5]
k = 2
rotate_array(arr, k)
print(arr)
运行结果:
[3, 4, 5, 1, 2]
测试过程:
将数组 [1, 2, 3, 4, 5] 向左循环移动 2 个位置,即 [3, 4, 5, 1, 2]。
原文地址: https://www.cveoy.top/t/topic/eK5I 著作权归作者所有。请勿转载和采集!