一,思路:
要使中位数发生变法最快的方法就是,将中位数上的值增加,但是我们加完之后一定,会使中位数发生变化吗?我举个例子你就明白了。例如:1 2 2 3,起初中位数是 2,那我们给他加 1,则会得到 1 2 3 3,中位数还是 2,没有变化。那我们给两个2都加上1时就会变成 1 3 3 3,中位数变成了3。所以我们会发现,最少的操做次数是看在中位数后面有x个和中位数数值一样,则操做次数为x+1次。
二,代码:
#include <iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1e5+10;
int arr[N];
void Solved() {
int n;
cin>>n;
for(int i=1;i<=n;i++)cin>>arr[i];
//排序
sort(arr+1,arr+n+1);
//向上取整
int idx=(n+1)/2;
//找相同数的个数
int cnt=1;
for(int i=idx+1;i<=n;i++){
if(arr[i]==arr[idx]) cnt++;
}
cout<<cnt<<endl;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int t;
cin>>t;
while(t--) {
Solved();
}
return 0;
}