Python数组左旋转代码运行慢,嵌套循环与浅拷贝哪个是核心优化点?
核心问题解答
你对复杂度的计算存在误区:嵌套循环的单次内层遍历是O(n),浅拷贝的单次操作也是O(n),两者都被包裹在外层的d次循环中,所以总时间复杂度是O(dn),当d的量级和数组长度n接近时,整体就是O(n²)* 级别。嵌套循环和重复浅拷贝都是高耗时来源,不存在明确的主次之分,核心问题是你选择了「逐次左移1位、重复执行d次」的低效率实现思路。
优化方案
数组左旋转d位的操作完全可以通过切片一次性完成,不需要逐次移动元素,优化后代码如下:
def rotLeft(a, d): size_a = len(a) # 处理d大于数组长度的场景,消除无效旋转 d = d % size_a # 直接切片拼接完成左旋转,时间复杂度O(n) rotated_arr = a[d:] + a[:d] for num in rotated_arr: print(num, end=' ') a = [1, 2, 3, 4, 5] d = 4 rotLeft(a, d)
优化后的代码消除了嵌套循环和重复浅拷贝,仅需一次数组拼接操作即可得到结果,在数组长度和d较大的场景下性能提升会非常显著。
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

