HackerRank Python - 一些测试用例得到“因超时而终止”,我该如何优化代码?

时间:2016-10-14 21:34:05

标签: python python-3.x

目前,在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]])

1 个答案:

答案 0 :(得分:1)

根本不需要改变列表。只需在您执行查找时从您传递的索引中减去k(如果k可能大于n,则可能使用模数)。每次查询O(1),或整体O(q)

即使您想要转换实际列表,也不需要一次只执行一个元素(这需要k个操作,每个操作需要O(n)次,所以{总共{1}}。您可以简单地连接O(n*k)a[-k:](可能再次使用模数来修复a[:-k]案例),只需k > n次。{/ p>