主元素判断

有一个数组r,里面是n个随机排列整数,找到里面的众数,如果该众数的重数大于n/2,则该数为这个数组的主元素

如果按照众数的计算方法,需要先给数组排序。然后再遍历每个元素,得到众数和重数,再来判断重数与n/2的关系。以下为排完序之后找众数的算法。

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <cmath>
 6 #include <stack>
 7 #include <map>
 8 #include <queue>
 9 
10 using namespace std;
11 
12 int main()
13 {
14     int n, num, my_max = -0x3f3f3f3f, a, b, temp = 1;
15     scanf("%d", &n);
16     scanf("%d",  &a);
17     for(int i = 1; i < n; ++ i)
18     {
19         scanf("%d", &b);
20         if(a == b) temp ++;
21         else
22         {
23             temp = 1;
24             a = b;
25         }
26         if(temp >= my_max)
27         {
28             my_max = temp;
29             num = b;
30         }
31     }
32     printf("%d\n%d\n", num, my_max);
33     return 0;
34 }

解法二:依次扫描所给数组的每个整数,将第一个遇到的整数N保存到C中,记录N出现的次数为1;若遇到下一个整数任为N,则计数加1,否则,计数减1;计数为0时,将下次遇到的数保存到C,计数重新记为1,开始新一轮的计数;直到数组的数扫描完为止。C即为众数。重新扫描C在数组中出现的次数,判断是否满足要求。

 

posted @ 2018-07-20 17:20  三儿啊  阅读(243)  评论(0编辑  收藏  举报