2017-09-06 2 views
0

Ich versuche, einen kreisförmigen Rotationsalgorithmus für eine hackerrank Herausforderung Frage zu implementieren. Mein Code (mittlerer Block) scheint bei kleinen Eingängen gut zu funktionieren, aber bei größeren Eingängen aufgrund von Timeout fehlgeschlagen. Jede Hilfe, die den Code optimiert, wird sehr geschätzt.Circular Array Rotation: Python 2.7

Hier ist mein Code:

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

Erwägen Sie die Verwendung numpy. – DyZ

Antwort

1

Sie müssen sich nicht drehen tatsächlich das Array das Element zu finden, aber Sie können Modulo Kalkül verwenden, das zu tun. Wenn wir Index i haben und wir bewegen es k Plätze sein neuer Index wird m=(i+k)%n sein, wenn wir einen Index m haben, der k Orte verschoben wurde, dann ist es der vorherige Ort war i=(m-k)%n.

Zu wissen, dass wir folgendes schreiben:

for a0 in xrange(q): 
    m = int(raw_input().strip()) 
    prev_index = (m - k) % n 
    print a[prev_index]