【发布时间】:2018-03-03 03:21:11
【问题描述】:
我正在尝试解决来自 HackerRank 的问题,当我提交解决方案时,我收到一条错误消息,指出“因超时而终止”。
请检查代码并建议我如何优化。
问题: 对 n 大小的数组进行左旋转操作会将数组的每个元素向左移动 1 个单位。例如,如果对数组 [1,2,3,4,5] 执行 2 次左旋转,则数组将变为 [3,4,5,1,2]。
给定一个包含 n 个整数和一个数字 d 的数组,对数组执行 d 次左旋转。然后将更新后的数组打印为一行以空格分隔的整数。
输入格式
第一行包含两个以空格分隔的整数,分别表示 n(整数个数)和 d(必须执行的左旋转数)的值。 第二行包含以空格分隔的整数,描述数组初始状态的各个元素。
输出格式
打印一行 n 个空格分隔的整数,表示执行 d 次左旋转后数组的最终状态。
示例输入
5 4 1 2 3 4 5
样本输出
5 1 2 3 4
说明
当我们执行 d = 4 左旋转时
因此,我们将数组的最终状态打印为一行以空格分隔的值,即 5 1 2 3 4。
我的代码:
def array_left_rotation(ar, n, k):
for j in range(k):
temp = ar[0]
for i in range(0,n-1):
ar[i] = ar[i+1]
ar[n-1] = temp
return ar
n, k = map(int, input().strip().split(' '))
a = list(map(int, input().strip().split(' ')))
answer = array_left_rotation(a, n, k);
print(*answer, sep=' ')
【问题讨论】:
-
您可以使用 Python 的数组切片:
a[k:] + a[:k]。 -
@MOehm ,最好对
k % n进行切片。已经解释here