2016-10-14 5 views
0

現在、HackerRankでは、Circular Array Rotationの問題を解決しようとしています。ほとんどのテストケースが機能しますが、一部は「タイムアウトのために終了しました」。HackerRank Python - いくつかのテストケースが「タイムアウトのために終了しました」というコードをどのように最適化できますか?

コードを変更して最適化するにはどうすればよいですか?

#!/bin/python3 

import sys 


n,k,q = input().strip().split(' ') 
n,k,q = [int(n),int(k),int(q)] 
a = [int(a_temp) for a_temp in input().strip().split(' ')] 

m = [] 
for a0 in range(q): 
    m.append(int(input().strip())) 

for i in range (0, k % n): 
    temp = a[n-1] # Stores the last element temporarily 
    a.pop(n-1)  # Removes the last element 
    a = [temp] + a # Appends the temporary element to the start (prepends) 


for i in range (0, q): 
    print(a[m[i]]) 
+0

これはおそらくhttp://codereview.stackexchange.com/に適しています。 – wflynny

答えて

1

リストを一切変換する必要はありません。ルックアップを行うたびに渡されるインデックスからkを減算してください(おそらく、knより大きい場合はモジュラスで)。ルックアップごとにO(1)、または全体的にO(q)です。

実際のリストを変換したい場合でも、一度に1つの要素を実行する必要はありません(kの操作がそれぞれO(n)の時間を要しますので、合計はO(n*k)です)。 a[-k:]a[:-k]を連結して(おそらくk > nの場合を修正するモジュラスで)、単にO(n)の時間を1回とすることができます。

関連する問題