あなたが連続する整数[1、2、3、...、n]は、任意の重複無しからなる無秩序アレイが与えられます。あなたは、任意の2つの要素を交換するために許可されています。あなたは配列を昇順にソートするために必要なスワップの最小数を見つける必要があります。
これは、簡単にグラフとして問題を可視化することによって行うことができます。我々があります N ノードとノードから有向エッジ I ノードへ jの i番目のインデックスの要素は、ソートされた配列内のj番目のインデックスに存在しなければならない場合。
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)