题解:B4277 [蓝桥杯青少年组国赛 2023] 主要成分
题意
有
思路
用一个 map 来存储每一个数的出现次数,再循环遍历每一个出现次数超过一半的。
可是这样交上去会超时,于是我们可以把判断的代码放到输入的循环中,如果满足条件直接输出并 return。
代码
#include<bits/stdc++.h>
using namespace std;
long long n,a[1000010];
map<int,int> mp;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n;
int ans=-1;
for(int i=1;i<=n;i++){
cin>>a[i];
mp[a[i]]++;
if(mp[a[i]]>n/2){
ans=a[i];
cout<<ans;
return 0;
}
}
cout<<"No\n";
return 0;
}