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]

Python 数组循环左移算法:O(n) 时间复杂度和 O(1) 空间复杂度

原文地址: https://www.cveoy.top/t/topic/eK5I 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录