思路
位置与索引是一一对应的,因此直接交换就可以了。
又因为数据量最大才10000,所以不用担心超时。
C++ 代码
#include<iostream>
using namespace std;
const int N = 10005;
int a[N];
int n,res;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
int i=1;
while(i!=n)
{
if(a[i]!=i)
{ //索引与值不对应
int index = a[i];
swap(a[i],a[index]);
res++;
}
else
{
//索引值对应
i++;
}
}
cout<<res<<endl;
return 0;
}