首页 > 代码库 > 28:出现次数超过一半的数

28:出现次数超过一半的数

描述

给出一个含有n(0 < n <= 1000)个整数的数组,请找出其中出现次数超过一半的数。

数组中的数大于-50且小于50。

输入

第一行包含一个整数n,表示数组大小;
第二行包含n个整数,分别是数组中的每个元素,相邻两个元素之间用单个空格隔开。

输出

如果存在这样的数,输出这个数;否则输出no。

样例输入

3
1 2 2

样例输出

2

来源

习题(13-6)

代码

 1 #include<cstdio>
 2 #include<string>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 #include<cstdlib>
 7 #include<cmath>
 8 using namespace std;
 9 int a[10000],b[1000];
10 int main()
11 {
12    int n;
13    cin>>n;
14    a[0]=51;
15    for(int i=1;i<=n;i++)
16    {
17            cin>>a[i];
18            b[a[i]+50]++;//桶
19    }
20    for(int i=0;i<=101;i++)
21    if(b[i]>n/2)
22    {
23         cout<<i-50;
24         return 0;
25    }
26    cout<<"no";
27    return 0;
28 }

AC:出题人的节操掉了

28:出现次数超过一半的数