解析:
统计数组中小于x元素的个数l,大于x的元素个数r;
如果个数相加等于n说明没有x,则必须插入一个x,并且数组长度n增加1;
如果元素个数是偶数个,则插入一个x,数组长度n增加1;
找到元素数量较多的一组记为maxd;
如果数量较多的一组数字个数不低于组个数一半,就必须要继续向另一侧插入元素;想象下把排好序的数组在较多的这组与x的交界处对折,并且让这个x做对折端点,这样较少的那组差多少不整齐,就要补多少。
#include<bits/stdc++.h>
using namespace std;
const int N=100010;
int n,a[N],x,l,r,ans;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
cin>>x;
for(int i=1;i<=n;i++){//数据组,一组小于x,一组大于x,剩余等于x;
if(a[i]>x)r++;
else if(a[i]<x)l++;
}
if(l+r==n){
n++;
ans++;
}
if(n%2==0){
n++;
ans++;
}
if(l>r)swap(l,r);
if(r>n/2){
ans+=r*2-n+1;
}
cout<<ans;
}
评论区