Python 优化代码以减少交换次数
您将得到一个无序数组,该数组由连续的整数组成,没有任何重复项。您可以交换任意两个元素。您需要找到按升序排序数组所需的最小交换次数。我得到的代码,在几个测试用例中超时了。有什么方法可以优化代码吗 我的代码如下:Python 优化代码以减少交换次数,python,sorting,Python,Sorting,您将得到一个无序数组,该数组由连续的整数组成,没有任何重复项。您可以交换任意两个元素。您需要找到按升序排序数组所需的最小交换次数。我得到的代码,在几个测试用例中超时了。有什么方法可以优化代码吗 我的代码如下: 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]):
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
您实际上不需要生成参考列表
lst
,因为您应该知道arr
中的n
应该在索引n-1
中才能升序。此外,执行k=arr.index(lst[i])
需要O(n)
时间进行搜索,这完全是不必要的。以下是我的解决方案:
def最小互换(arr):
互换总额=0
开始=0
启动时
如果我猜对了,这是一个关于Hackerrank的问题,在通过测试时,这就是我的解决方案P
该算法从位置1开始,将光标下的项目直接交换到正确的位置。将正确的项目交换到此位置时,它会将光标增加到下一个项目并重复此过程
这比按顺序单步遍历数组,将正确的项交换到每个位置更有效,因为您不必计算正确的项在列表尾部的确切位置。要使用列表上的
O(n)
效率[1..n]
进行无交换,您最好使用,或者针对这类问题进行了优化的子类型。通常情况下,情况并非如此,并且具有更好的效率(n log(n)
)(包括交换次数),我认为这两种算法都可以就地运行。连续整数是否还没有按升序排列?请告诉我算法的名称,或者如果没有名称,其思想类似于哪种排序算法?