#include<bits/stdc++.h>
using namespace std;
long long a[1005];
long long b[100000];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
b[a[i]]++;
}
for(int i=0;i<n;i++){
if(b[i]>=n/2){
cout<<i<<" ";
}
}
return 0;
}
1 个赞
题目:
39. 出现次数超过一半的数
题目ID:1204必做题100分
最新提交:
Wrong Answer
0 分
历史最高:
Wrong Answer
0 分
时间限制: 1000ms
空间限制: 65536kB
题目描述
时间:1s 空间:256M
题目描述:
给你n个数,有一个数的出现次数超过一半,找出这个数。
输入格式:
输入两行。
第一行包含一个整数�n
第二行包含�n个整数��ai
输出格式:
输出一行,包含一个整数。
样例输入:
5 1 2 2 3 2
样例输出:
2
约定:
1<=�<=1000,1<=��<=1000000000 1<=n<=1000,1<=ai<=1000000000
提示:
水题,只需要一个数组记录每个数的出现次数,在判断输出即可
核心代码
int n, f, x = 0;
cin >> n;
int a[n], b[n];
bool flag1 = 0;
for (int i = 0; i < n; i++) {
cin >> f;
for (int j = 0; j < x; j++) {
if (f == b[j]) {
++a[j];
flag1 = 1;
}
}
if (!flag1) {
b[x] = f;
a[x] = 1;
++x;
}
flag1 = 0;
}
for (int k = 0; k < x; k++) {
if (a[k] * 2 > n) {
cout << b[k];
return 0;
}
}
解决方案
1 个赞
意外发现一个linan大佬
1 个赞
没有没有,你过奖了,我才学到基础算法三
顶多算个小佬
1 个赞