【发布时间】:2022-01-19 12:44:32
【问题描述】:
我一直在尝试 HackerRank 练习题,但我不知道为什么我的左旋转算法不起作用。我在网上看过,但我看不到有人试图像我一样做这件事。任何帮助将不胜感激。
a = 数组 d = 左转次数
示例: a = 1 2 3 4 5 d = 4
输出 = 5 1 2 3 4
def rotLeft(a, d):
out = a
length = len(a)
startingposition = 0
for number in a:
position = startingposition
for count in range(d):
position -= 1
if position == -1:
position = length
startingposition += 1
out[position] = number
return(out)
【问题讨论】:
-
请提供参数和预期输出
-
你认为
out = a复制了a吗?它没有。它只是创建了对a的另一个引用。所以out[position]对a进行了更改。这可能是您的代码不起作用的原因吗? -
我知道你尝试解决这个问题的方法,但是使用
position加上if的循环使用mod会更好 -
如果要将
a旋转到位,请返回None。如果您想创建一个新的轮换来源,请保持a不变并返回新列表。除非您有非常充分的理由,否则不要混合使用这两种方法。 -
Off-by-one errors 很常见。它甚至 been written 说“计算机科学中有 2 个难题:缓存失效、命名事物和 off-by-1 错误。”