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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:出现次数超过一半的数的主要内容,如果未能解决你的问题,请参考以下文章

28数组中出现次数超过一半的数字

数组中出现次数超过一半的数

算法笔记_131:出现次数超过一半的数(Java)

一本通1186 出现次数超过一半的数(类似桶排序)

剑指offer(28)

剑指offer系列54---数组中出现次数超过一半的数