我的思路
定义一个数组book分别储存1到n, 另一个数组存储输入的id,用两重循环一一比较计数,book数组从一开始,arr数组依次比较,若相等则计数count+1,若count==1则sum+1,若count>2,则sum加上count-2, 以此得到除有两个相同id外的所有id个数,最后sum/2得到要修改的个数
问题
得到除有两个相同id外的所有id个数,直接sum/2得到要修改的个数 没有考虑全面,漏掉了题目要求id只能由两个相同的 例如若为1 1 1 1,则需修改两次
还有就是定义book数组一一比较会超时
最终只通过了20%测试用例
我的代码
#include<stdio.h>
int main(){
int n,i,sum=0,j;
long long arr[100001]={0};
scanf("%d",&n);
int book[100001]={0};
for(i=1;i<=n;i++){
scanf("%d",&arr[i]);
}
for(i=1;i<=n;i++){
book[i]=i;
}
for(i=1;i<=n;i++){
int count=0;
for(j=1;j<=n;j++){
if(book[i]==arr[j]){
count++;
}
}
if(count==1){
sum++;
}
else if(count>2){
sum=sum+(count-2);
}
}
printf("%d",sum/2);
return 0;
}