2022-01-04:一个无序数组长度为n,所有数字都不一样,并且值都在[0...n-1]范围上。 返回让这个无序数组变成有序数组的最小交换次数。 来自小红书。

2023-06-13,,

2022-01-04:一个无序数组长度为n,所有数字都不一样,并且值都在[0…n-1]范围上。
返回让这个无序数组变成有序数组的最小交换次数。
来自小红书。

答案2022-01-04:

下标循环怼。
时间复杂度:大于O(N)。待定。
空间复杂度:O(1)。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
arr := []int{4, 3, 2, 1, 0}
ret := minSwap2(arr)
fmt.Println(ret)
} func minSwap2(arr []int) int {
ans := 0
for i := 0; i < len(arr); i++ {
for i != arr[i] {
arr[i], arr[arr[i]] = arr[arr[i]], arr[i]
ans++
}
}
return ans
}

执行结果如下:


左神java代码

2022-01-04:一个无序数组长度为n,所有数字都不一样,并且值都在[0...n-1]范围上。 返回让这个无序数组变成有序数组的最小交换次数。 来自小红书。的相关教程结束。

《2022-01-04:一个无序数组长度为n,所有数字都不一样,并且值都在[0...n-1]范围上。 返回让这个无序数组变成有序数组的最小交换次数。 来自小红书。.doc》

下载本文的Word格式文档,以方便收藏与打印。