数组左旋转Python代码输出异常:未执行旋转操作求助
问题分析与解决:数组左旋转代码未生效
嘿,我帮你找到了问题的根源——你的leftRotate函数里的循环条件写错啦!
看这段代码:
while (d-1) > 0: leftRotatebyOne(arr, n)
当你输入旋转次数d=1时,d-1等于0,完全不满足>0的判断条件,所以循环一次都没跑,leftRotatebyOne根本没被调用,数组当然还是原来的样子!
修复方案
把循环条件改成循环d次就好,每次执行完单步旋转后记得把d减1,不然会变成死循环:
def leftRotate(arr, d, n): # 循环d次,每次左移一位 while d > 0: leftRotatebyOne(arr, n) d -= 1 # 减少剩余旋转次数
修改后再测试,输入d=1时,循环会执行1次,调用leftRotatebyOne把数组左移一位,就能得到你想要的2 3 1输出了。
更简洁的Python实现方式
其实Python的切片特性可以让这个功能变得超级简单,不用写循环单步旋转的函数,代码更高效也更易读:
def leftRotate(arr, d): # 处理旋转次数超过数组长度的情况,避免做无用功 d = d % len(arr) return arr[d:] + arr[:d] def PrintArray(arr): print(" ".join(map(str, arr))) arr = [] l = int(input("Enter the number of elements: ")) for i in range(0, l): ele = int(input()) arr.append(ele) d = int(input("Enter the number of rotations: ")) rotated_arr = leftRotate(arr, d) PrintArray(rotated_arr)
这种方式的时间复杂度是O(n),比原来的O(n*d)高效很多,还自动处理了比如旋转次数大于数组长度的边界场景(比如数组长度3,旋转4次等价于旋转1次)。
内容的提问来源于stack exchange,提问作者user11147478
相关产品推荐
相关产品推荐

