我试图在HackerRank上解决循环数组的旋转问题。 https://www.hackerrank.com/challenges/circular-array-rotation/problem
下面的代码通过了除case#4之外的所有测试用例,它会得到一个运行时错误。有人能指出问题吗?在
def circularArrayRotation(a, k, queries):
if k < len(a):
k = k
elif k == len(a):
k = 0
else:
k = k%a
newList = []
for val in queries:
newInd = -k+val
if abs(newInd) > len(a):
newInd = newInd - (len(a)-1)
newList += [a[newInd]]
else:
newList += [a[newInd]]
return newList
你可以用deque,deque是一个双端队列。它可以用来在两端添加或删除元素。在
你的解决方案是正确的。但没有在规定的时限内运行,仅限于第4例。在
每次都要计算新查询的值,这需要时间。在
你能做的就是立刻得到旋转的数组。然后对旋转数组运行查询。将结果保存在列表中并返回。在
使用上述方法,可以在o(n)时间内完成列表切片。然后运行查询是o(1)次。在
相关问题 更多 >
编程相关推荐