有一个数组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 %d ", num, my_max); 33 return 0; 34 }
解法二:依次扫描所给数组的每个整数,将第一个遇到的整数N保存到C中,记录N出现的次数为1;若遇到下一个整数任为N,则计数加1,否则,计数减1;计数为0时,将下次遇到的数保存到C,计数重新记为1,开始新一轮的计数;直到数组的数扫描完为止。C即为众数。重新扫描C在数组中出现的次数,判断是否满足要求。