k值大于数组长度时的数组左旋k位运行结果错误求助
数组左旋k位问题排查与修正
现有代码的核心问题
- 缺失k值归一化逻辑:数组长度为n时,左旋k位等价于左旋
k % n位,你示例中k=7、n=6的场景,实际只需要左旋1位,这一步处理缺失直接导致后续逻辑完全失效。 - 硬编码操作全局
source变量,没有使用函数传入的array参数,函数完全不具备复用性。 - 语法错误:Python 单行注释使用
#而非//,你编写的//Before this everything is alright.属于非法语法,会直接中断代码运行。 - 分支逻辑不生效:当k大于数组长度时,
i + k < j的判断永远为假,if分支全程不会执行,数组没有任何修改,这就是你输出原数组的直接原因。 - 位移逻辑错误:
temp = k - len(array) - 1的计算规则完全不符合左旋位移要求,就算进入elif分支也无法得到正确结果。
修正后的实现
Python中可以直接用切片快速实现需求,代码简洁且性能有保障:
def rotateLeft(array, k): n = len(array) # 处理k大于数组长度的场景,归一化k k = k % n # 左旋k位等价于将前k个元素移动到数组末尾 return array[k:] + array[:k] source = [10, 20, 30, 40, 50, 60] print(rotateLeft(source, 7))
运行上述代码输出为[20, 30, 40, 50, 60, 10],和预期结果一致。
内容的提问来源于stack exchange,提问作者Md Irtiza Hossain
相关产品推荐
相关产品推荐

