Hackerrank-インタビューの準備キット-配列-最小スワップは、配列をソートします

あなたが連続する整数[1、2、3、...、n]は、任意の重複無しからなる無秩序アレイが与えられます。あなたは、任意の2つの要素を交換するために許可されています。あなたは配列を昇順にソートするために必要なスワップの最小数を見つける必要があります。

これは、簡単にグラフとして問題を可視化することによって行うことができます。我々があります  N  ノードとノードから有向エッジ  I  ノードへ  jの  i番目のインデックスの要素は、ソートされた配列内のj番目のインデックスに存在しなければならない場合。

A

B

def minimumSwaps(arr): 
    n = len(arr) 
    vis = {k:False for k in range(n)} 
    count=0

    for i in range(n):
        cycle_size = 0
        if arr[i] != i+1: 
            start=i
            while not vis[start]:
                vis[start]=True
                start=arr[start]-1
                cycle_size +=1
            if cycle_size >0:
                count+=(cycle_size - 1) 
    return count 

arr=[7,1,3,2,4,5,6]
minimumSwaps(arr)

 

公開された128元の記事 ウォン称賛90 ビュー4853

おすすめ

転載: blog.csdn.net/weixin_45405128/article/details/103995533