目前,在HackerRank上,我正在尝试解决Circular Array Rotation问题。大多数测试用例都有效,但有些是“由于超时而终止”。
如何更改代码以优化代码?
#!/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 :(得分:1)
根本不需要改变列表。只需在您执行查找时从您传递的索引中减去k
(如果k
可能大于n
,则可能使用模数)。每次查询O(1)
,或整体O(q)
。
即使您想要转换实际列表,也不需要一次只执行一个元素(这需要k
个操作,每个操作需要O(n)
次,所以{总共{1}}。您可以简单地连接O(n*k)
和a[-k:]
(可能再次使用模数来修复a[:-k]
案例),只需k > n
次。{/ p>