圆阵列旋转:Python 2.7

时间:2017-09-06 03:30:56

标签: python arrays python-2.7 data-structures rotation

我正在尝试为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]

1 个答案:

答案 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]