题目:
给定一个长度为 n 序列 {a},对序列 {a} 进行任意排列之后得到新的数组 {b},求满足 i∈[1,n],ai≠bi的 i 最多可能个数。
输入描述:
第一行输入一个整数 n(1≤n≤105)
第二行,n 个整数 ai(1≤ai≤105)
输出描述:
一行,表示答案。
示例1
输入
5
1 1 2 2 5
输出
5
思路:先找到序列中相同元素的最大数量,如果小于等于序列总数一半时,直接输出序列长度,否则输出2倍的其他元素个数之和
AC代码:
#include<bits/stdc++.h> using namespace std; int main() { int n,a[101010]; cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; } sort(a,a+n); int sum=1,ans=1; for(int i=1;i<n;i++) { if(a[i]==a[i-1]) ans++; else sum=max(ans,sum),ans=1; } sum=max(ans,sum); int num; num=n-sum; if(sum<=n/2) { cout<<n<<endl; } else cout<<2*num<<endl; return 0; }