
由题意得知给我们一串数字,我们每次交换两位,最少交换多少次成功得到有顺序的数组。我们以平常的思维去思考,加入给你一串数字获得最少的交换次数,意味着你的交换后续基本不会变,比如说2 1 3 5 4 中1与2交换后不变,4与5交换后不变。而且已知给出的数字必定和下标顺序一致,那么我们可以更换数字直到它和对应下标相同即可得到结果。
①数组接收数据
②循环遍历数组,和下标不对应就进行更换直到对应下标相同
③找到对应下标的数字后交换两个数字
④每次交换使用计数器加1
⑤输出计数器结果
代码如下👇
public static void main(String[] args) {
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int[] arr=new int[n+1];
for (int i = 1; i <= n; i++) {
arr[i]=scan.nextInt();
}
int count=0;
for (int i = 1; i <= n; i++) {//遍历数组
while(arr[i]!=i) {//r如果位置不对,一直更换到位置对
int temp=arr[arr[i]];
arr[arr[i]]=arr[i];
arr[i]=temp;
++count;
}
for (int j = 1; j < arr.length; j++) {
System.out.print(arr[j]+" ");//测试
}
System.out.println();//测试
}
System.out.println(count);
scan.close();
}
public static void swap(int a,int b) {
int temp=0;
temp=a;
a=b;
b=temp;
}
交换代码如上,如果觉得第一个代码比较复杂可以看一下图示,或者写一个全局方法。
