2023-04-16:给定一个长度为N的数组,值一定在0~N-1范围,且每个值不重复
比如,arr = [4, 2, 0, 3, 1]
0 1 2 3 4
把0想象成洞...,任何非0数字都可以来到这个洞里,然后在原本的位置留下洞
比如4这个数字,来到0所代表的洞里,那么数组变成 :
arr = [0, 2, 4, 3, 1]
也就是原来的洞被4填满,4走后留下了洞
任何数字只能搬家到洞里...,并且走后留下洞
通过搬家的方式,想变成有序的,有序有两种形式
比如arr = [4, 2, 0, 3, 1],变成
[0, 1, 2, 3, 4]或者[1, 2, 3, 4, 0]都叫有序。...对于第二种有序情况,我们可以先倒序遍历数组,找出每个数需要移动的最小距离,从而计算出需要移动的次数。
3. 最后比较这两种情况下的最小搬动次数,返回较小值即可。
注意事项:
1....数字只能搬家到洞里,并且走后留下洞,因此在交换过程中需要记录其中一个数字所在的位置作为洞的位置。