SDNUOJ 1321众数

Description
给出n个数,求这n个数的众数。

众数的定义是:是一组数据中出现次数最多的数值,叫众数,有时众数在一组数中有好几个。

Input
第一行有个整数T,表示测试组数T<=10.

接下来有T个测试组,每个测试组的第一行有整数n,表示有n个数。

接下来1行有n个数,第i个数ai ,0<=ai<1000

n<=1000

Output
对于每个测试组,请把答案在一行中输出,如果有多个众数,则按照从小到大的顺序把他们输出。

Sample Input
1
5
3 3 2 2 4
Sample Output
2 3

#include <algorithm>
#include <cstdio>
#include <iostream>
#include <cstring>
#include <vector>
using namespace std;

int main()
{
    int t;
    cin >> t;
    while(t--)
    {
        int n;
        cin >> n;
        int a[1005] = {};
        int num[1005] = {};
        for(int i = 0; i < n; i++)
        {
            scanf("%d", &a[i]);
        }
        sort(a, a + n);
        int max_num = 0;
        int max_a;
        for(int i = 0; i < 1000; i++)
        {
            for(int j = 0; j < n; j++)
            {
                if(i == a[j])
                {
                    num[i] = upper_bound(a, a + n, i) - lower_bound(a, a + n, i);
                    if(num[i] > max_num)
                    {
                        max_num = num[i];
                        max_a = a[i];
                    }
                    break;
                }
            }
        }
        vector<int> vec;
        vec.clear();
        for(int i = 0; i < 1000; i++)
        {
            if(num[i] == max_num)
                vec.push_back(i);
        }
        reverse(vec.begin(), vec.end());
        while(!vec.empty())
        {
            cout << vec.back();
            if(vec.size() != 1)
                cout << " ";
            vec.pop_back();
        }
        cout << '\n';
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zhaobaole2018/article/details/84928804