这个节目是为了比赛。但它超过了时间。那么,有什么方法可以让代码运行得更快呢。如果您能建议如何用python高效地打印二维列表。我想打印二维列表中的int。 详细程序说明的链接:https://www.codechef.com/MAY20B/problems/TRPLSRT
for i in range(int(input())):
N,K = map(int,input().split())
arr=list(map(int,input().split()))
shift = []
shiftList = []
temp = 0
c = 0
while(c < K):
c += 1
for i in range(len(arr)):
if(arr[i] != (i+1) ):
shift.append(i)
if(len(shift)==3):
shiftList.append(shift)
temp = arr[shift[-1]]
arr[shift[-1]] = arr[shift[-2]]
arr[shift[-2]] = arr[shift[-3]]
arr[shift[-3]] = temp
shift = []
break
if(arr == sorted(arr)):
print(len(shiftList))
for i in range(len(shiftList)):
for j in range(len(shiftList[i])):
print(shiftList[i][j] + 1,end=" ")
print()
else:
print(-1)
代码的
for i in range(len(arr))
部分可以简化,但我相信这不是导致运行时间过长的问题您应该避免在每次迭代时从一开始就查看列表。当您找到第一个“未排序”索引时,您应该跟踪它,以便在下一次传递时,您可以从那里开始该过程,而不是每次都从索引0开始。当您逐步对数组排序时,这将减少不必要的循环
其次,问题陈述不要求索引按递增顺序排列,因此您可以选择列表中的任意3个索引。最佳策略是选择3个指数,以便换档操作在其适当位置放置至少两个值:
相关问题 更多 >
编程相关推荐