2017-09-06 8 views
0

hackerrankチャレンジ質問の循環回転アルゴリズムを実装しようとしています。私のコード(中間ブロック)は小さな入力に対してはうまく動作するようですが、タイムアウトのために大きな入力に対しては失敗します。コードを最適化する助けがあれば幸いです。あなたが実際には配列のアイテムを見つけるために回転する必要はありませんが、あなたはそれを行うには剰余計算を使用することができます円形配列の回転:Python 2.7

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

はnumpyの使用を検討してください。 – DyZ

答えて

1

は、ここに私のコードです。 インデックスiがあり、それをk個の場所に移動すると、新しいインデックスは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]