交换两个任意位置上的最小步数
求最小步数,要保证每一次变换都是将环增加,直到n个自环为止
最小步数:n - 初始时环的数量
交换相邻两个位置上的最小步数:求解逆序对
import java.util.*;
public class Main {
static int[] b = new int[10010];
static boolean[] st = new boolean[10010];
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for (int i = 1; i <= n; i++) b[i] = sc.nextInt();
int cnt = 0;
for (int i = 1; i <= n; i++)//对应代码是枚举索引(都可以)
if (!st[i]) {
cnt++;
//单链表的遍历方式
for (int j = i; !st[j]; j = b[j])
st[j] = true;
}
System.out.println(n - cnt);
}
}