【发布时间】:2019-12-20 18:52:02
【问题描述】:
问题:
给定一个由连续整数
[1, 2, 3, ..., n]组成的无序数组,没有任何重复。您可以交换任何两个元素。您需要找到按升序对数组进行排序所需的最小交换次数。
我的解决方案/问题:
我的代码做了它应该做的;但是,对于大型数组,运行时间比允许的要长。
def minimumSwaps(arr):
swaps = 0
for num in range(1, len(arr)):
if num != arr.index(num)+1:
arr[arr.index(num)] = arr[num-1]
arr[num-1] = num
swaps+=1
return swaps
关于如何优化它的任何想法/建议?
【问题讨论】:
-
换位的最小数量似乎需要将您尝试做的排列表示为不相交循环的产物,然后将每个循环表示为换位的产物(其中一个长度为 @ 987654327@ 可以表示为
k-1转置的乘积,但不会更少)。 -
您似乎在寻求解决此问题的方法Hackerrank problem
-
请参阅this quesion from Theoretical Computer Science 了解更多信息。
-
Solution with Python code 满足 Hackerrank 时间限制。
标签: python sorting optimization