我正在尝试为hackerrank挑战问题实施循环旋转算法。我的代码(中间块)似乎对小输入运行良好,但由于超时而导致较大输入失败。任何有助于优化代码的帮助都将非常受欢迎。
这是我的代码:
import sys
n,k,q = raw_input().strip().split(' ')
n,k,q = [int(n),int(k),int(q)]
a = map(int,raw_input().strip().split(' '))
for j in range(0,k):
temp = a[n-1]
for i in range(n-2, -1, -1):
a[i+1] = a[i]
a[0] = temp
for a0 in xrange(q):
m = int(raw_input().strip())
print a[m]
答案 0 :(得分:1)
您不必实际旋转数组来查找项目,但您可以使用模数微积分来执行此操作。
如果我们有索引i并且我们移动它,那么他的新索引将是m=(i+k)%n
,所以如果我们有一个已经移动了k个位置的索引m,那么它之前的位置是i=(m-k)%n
。
知道我们可以写下以下内容:
for a0 in xrange(q):
m = int(raw_input().strip())
prev_index = (m - k) % n
print a[prev_index]