为您提供了一个无序数组,该数组由连续的整数[1, 2, 3, ..., n]
组成,没有重复项。您可以交换任意两个元素。您需要找到按升序对阵列进行排序所需的最小交换次数。我得到的代码在一些测试用例中超时。是否有任何方法可以优化代码?
我的代码如下:
def minimumSwaps(arr):
lst=[ele+1 for ele in range(len(arr))]
cnt=0
for i in range(len(arr)):
if(lst[i]!=arr[i]):
k=arr.index(lst[i])
arr[i],arr[k]=arr[k],arr[i]
cnt=cnt+1
return cnt
答案 0 :(得分:1)
您实际上并不需要生成引用列表lst
,因为您应该知道n
中的arr
应该在索引n-1
中才能升序。此外,进行k=arr.index(lst[i])
的搜索需要O(n)
的时间,这完全是不必要的。这是我的解决方案:
def minimumSwaps(arr):
total_swaps = 0
start = 0
while start < len(arr):
if arr[start] == start + 1:
start += 1
continue
arr[arr[start] - 1], arr[start] = arr[start], arr[arr[start] - 1]
total_swaps += 1
return total_swaps
如果我猜对了,这是关于Hackerrank的问题,这是通过测试时我的解决方案。 :P