判断是否满足条件即可,不可能出现没有重复的情况因为这样会导致要改的元素不止一个;。。。写题目前一定要把问题想清楚,不要急着下手
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<cmath>
#include <bits/stdc++.h>
using namespace std;
const int N = 3e5+10;
typedef long long LL;
int a[N], b[N],p1[N], p2[N], v1[N], v2[N];
int l1=0,l2=0;
int main()
{
int n;
scanf("%d", &n);
memset(v1,0,sizeof(v1));
memset(v2,0,sizeof(v2));
for(int i=1; i<=n; i++)
{
scanf("%d", &a[i]);
v1[a[i]]++;
}
int k1=0, k2=0;
for(int i=1; i<=n; i++)
{
if(v1[i]==0) l1=i;
if(v1[i]>1) l2=i;
}
for(int i=1;i<=n;i++)
{
if(v1[a[i]]>1) p1[k1++]=i;
}
for(int i=1; i<=n; i++) scanf("%d", &b[i]);
int h1=p1[0], h2=p1[1], cnt=0;
a[h1]=l1;
for(int i=1;i<=n;i++)
{
if(a[i]!=b[i]) cnt++;
}
if(cnt==1)
{
for(int i=1; i<=n; i++) printf("%d%c",a[i],i==n?'\n':' ');
return 0;
}
a[h1]=a[h2];
a[h2]=l1;
for(int i=1; i<=n; i++) printf("%d%c",a[i],i==n?'\n':' ');
return 0;
}