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

简介: 1186:出现次数超过一半的数

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

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

给出一个含有n(0 < n ≤ 1000)个整数的数组,请找出其中出现次数超过一半的数。数组中的数大于-50且小于50。

【输入】

第一行包含一个整数n,表示数组大小;

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

【输出】

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

【输入样例】

3

1 2 2

【输出样例】

2

【来源】

No

1. #include <iostream>
2. #include <map>
3. using namespace std;
4. int main(int argc, char *argv[])
5. {
6.  map<int,int> m;
7.  int n,t,k=0,p=0;
8.  cin>>n;
9.  for(int i=0;i<n;i++){
10.     cin>>t;
11.     m[t]++;
12.     if(m[t]>n/2 && p<m[t]){
13.       k=t;
14.       p=m[t];
15.     }
16. 
17.   }
18.   if(p>0) cout<<k;
19.   else cout<<"no";
20.   return 0;
21. }
1. #include <iostream>
2. #include <algorithm>
3. using namespace std;
4. int main(int argc, char *argv[])
5. {
6.  int d[1001]={0};
7.  int n,m=1,k;
8.  cin>>n;
9.  for(int i=0;i<n;i++) cin>>d[i];
10.   sort(d,d+n);
11.   for(int i=1;i<=n;i++){
12.     if(d[i-1]==d[i]) m++;
13.     else {
14.       if(m>n/2) {
15.         k=d[i-1];
16.         break;
17.       }
18.       m=1;
19.     }
20.   }
21.   if(m>n/2){
22.     cout<<k;
23.     return 0;
24.   }
25.   cout<<"no";
26.   return 0;
27. }

 

相关文章
|
7月前
|
算法
面试题:如何找出数组里出现次数超过总数1/3的数
如果你每次从nums中拿出3个不一样的数作为一组,肯定会出现两种情况。一,nums被取空了,那么nums中每个数出现次数最多占总次数的1/3,写代码很好处理吧!! 二,还有剩余,这个情况就复杂了,有可能剩余多个,但是……但是,最多只可能剩余两种数。 为什么? 3个不同的数凑一组才能删掉,所以不可能删掉超过1/3的数。所以超过1/3的数肯定被剩下来,但是,剩下来的俩数并不一定都是超过1/3的,这点额外注意。
40 1
【剑指offer】-数组汇总出现次数超过一半的数字-27/67
【剑指offer】-数组汇总出现次数超过一半的数字-27/67
剑指offer 40. 数组中出现次数超过一半的数字
剑指offer 40. 数组中出现次数超过一半的数字
55 0
|
C++
13.数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。
46 0
|
算法 搜索推荐
数组中出现次数超过一半的数字(简单难度)
数组中出现次数超过一半的数字(简单难度)
100 0
|
C++
201312-1 出现次数最多的数
201312-1 出现次数最多的数
55 0
201312-1 出现次数最多的数
|
算法
【刷算法】数组中出现次数超过一半的数字
【刷算法】数组中出现次数超过一半的数字
|
算法
剑指offer之数组出现次数超过一半的数字
剑指offer之数组出现次数超过一半的数字
104 0