题目详情
给定一个包含1-n的数列,我们通过交换任意两个元素给数列重新排序。求最少需要多少次交换,能把数组排成按1-n递增的顺序,其中,数组长度不超过100。
例如:
原数组是3,2,1, 我们只需要交换1和3就行了,交换次数为1,所以输出1。
原数组是2,3,1,我们需要交换2和1,变成1,3,2,再交换3和2,变为1,2,3,总共需要的交换次数为2,所以输出2。
函数头部:
C/C++
int run(const int *a,int n);
java
class solution {
public static int run(int [] a)
}
答题说明
main函数可不用完成。
我提交的代码
public class solution {
public static int run(int []a) {
int n=0,j=0;
while (true){
if(a[n]==(n+1)){
n++;
if(n==a.length){
break;
}
else{
continue; }
}
else{ //a[n]跟a[t-1]交换
int t=a[n];
a[n]=a[t-1];
a[t-1]=t;
j++;
}
}
return j;
}
//start 提示:自动阅卷起始唯一标识,请勿删除或增加。
public static void main(String args[])
{
}
//end //提示:自动阅卷结束唯一标识,请勿删除或增加。
}