You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:解决Hackerrank中Python左旋转代码超时问题

优化左旋转代码以解决超时问题

你的当前实现时间复杂度为 O(d*n),每次左移一位都要遍历整个数组,当d和n取值较大(比如105级别)时,总操作次数会达到1010,远超时间限制。以下是两种高效优化方案:

方案1:利用Python列表切片(最简洁)

左旋转d位的本质是将数组前d个元素移到末尾,直接用切片操作可以一步完成,时间复杂度O(n),代码极其简洁:

def rotateLeft(d, arr, n):
    # 处理d大于n的情况,避免不必要的重复旋转
    d = d % n
    return arr[d:] + arr[:d]

方案2:三次反转法(原地修改,空间复杂度O(1))

这是数组旋转的经典算法,通过三次反转操作实现左旋转,同样是**O(n)**时间复杂度,适合要求原地修改的场景:

def reverse(arr, start, end):
    while start < end:
        arr[start], arr[end] = arr[end], arr[start]
        start += 1
        end -= 1

def rotateLeft(d, arr, n):
    d = d % n
    # 反转前d个元素
    reverse(arr, 0, d-1)
    # 反转剩余的n-d个元素
    reverse(arr, d, n-1)
    # 反转整个数组
    reverse(arr, 0, n-1)
    return arr

关键说明

  • 加入d = d % n是为了处理d >= n的情况,比如数组长度为8时,旋转10次和旋转2次效果完全一致,避免做无用功。
  • Python的切片操作是底层优化的C实现,比手动嵌套循环效率高几个数量级;三次反转法则通过原地交换元素,不需要额外开辟存储空间。

内容的提问来源于stack exchange,提问作者Roger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 00:05:57