侧边栏壁纸
  • 累计撰写 192 篇文章
  • 累计创建 2 个标签
  • 累计收到 87 条评论

【题解】【上海】【中位数(二)】

Allen Best
2023-08-04 / 0 评论 / 4 点赞 / 122 阅读 / 558 字
温馨提示:
本文最后更新于 2023-08-04,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。
解析:

统计数组中小于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;
}

0

评论区