###### tags: `LeetCode` `HackRank` # HackRank Minimum Swaps 2 ## Goal 尋找最小交換次數,將陣列排序好 ## Solution ``` func minimumSwaps(arr []int32) int32 { intital := make([]int32, len(arr), (cap(arr)+1)*2) copy(intital,arr) quicksort(arr) //先排序找到最後目標 var Map map[int32]int32 Map = make(map[int32]int32) //建立目標索引 for i ,value := range(arr) { Map[value] = int32(i) } count := int32(0) index := int32(0) //當前陣列與目標陣列不同時將目標陣列的時候,用索引找交換的位置 //重覆到陣列完全相同 for ;index < int32(len(arr)); { if ( arr[index] != intital[index]) { intital[index] , intital[ Map[intital[index]]] = intital[ Map[intital[index]]] , dest[index] count ++ } else { index++ } } index++ return count } ``` ``` func quicksort(a []int32 ) { if len(a) < 2 { return } left , right := 0 , len(a)-1 pivot := rand.Int() % len(a) a[pivot] , a[right] = a[right] , a[pivot] for i,_ := range a { if a[i] < a[right] { a[left] , a[i] = a[i] , a[left] left++ } } a[left],a[right] = a[right],a[left] quicksort(a[:left]) quicksort(a[left+1:]) return } ```