【发布时间】:2021-09-26 16:15:22
【问题描述】:
我正在尝试通过在 HackerRank.com 上解决简单的数据结构问题来学习 Python。我试图解决Left Rotation 挑战:
对大小为 ???? 的数组的左旋转操作将每个 数组的元素向左 1 个单位。给定一个整数 ????, 将数组旋转剩下的步数并返回结果。
示例
???? = 2
???????????? = [1, 2, 3, 4, 5]
2 次旋转后,???????????? = [3, 4, 5, 1, 2].
我建议了以下解决方案。它适用于 8 个用例,但在最后两个用例中出现超时错误。
def rotateLeft(d, arr):
new = arr[0:]
for _ in range(d):
i, new = new[0], new[1:]
new.append(i)
return new
我不是在寻找一些基于公式的单线解决方案。我知道它可以解决手头的问题,但它无法帮助我理解如何优化基于循环的简单解决方案。
我正在寻找优化规则,对于这个问题和一般的问题。
【问题讨论】:
-
如何摆脱循环并使用切片一次性执行所有旋转?比如例子是
arr[2:] + arr[:2] -
d是一个变量,因为 slicing solution 只有在d=4时才有效。 -
当然你为
d的不同值做了不同的切片。
标签: python-3.x loops optimization