2-1 众数问题

给定含有n各元素的多冲击和S,每个元素在S中出现的次数成为该元素的重数。多重集S中重数最大的元素称为众数。

Sample Input

6

1 2 2 2 3 4

Sample Output

2 3

#include <bits/stdc++.h>

using namespace std;

#define PB push_back
#define rep(i,a,b)  for(int i=a,tt=b;i<=tt;++i)
#define drep(i,a,b) for(int i=a,tt=b;i>=tt;--i)
#define erep(i,e,x) for(int i=x;i;i=e[i].next)
#define irep(i,x)   for(__typedef(x.begin()) i=x.begin();i!=x.end();i++)
//#define read()  (strtol(ipos,&ipos,10))
#define sqr(x)  ((x)*(x))
#define pb  push_back
#define PS  system("pause");
#define LL long long

inline int read()
{
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9')
    {
        if(ch=='-')f=-1;
        ch=getchar();
    }
    while(ch>='0'&&ch<='9')
    {
        x=x*10+ch-'0';
        ch=getchar();
    }
    return x*f;
}
//.......
const int maxn = 1e5+10;
int number[maxn];
int main()
{
    #ifndef locol
    freopen("众数问题输入.txt" , "r" , stdin);
    freopen("众数问题输出.txt" , "w" , stdout);
    #endif // locol
    int n;
    while(cin >> n)
    {
//      int n = read();
        rep(i,1,n)number[i] = read();
        sort(number + 1, number + 1 + n);
        int Max_num = 1;
        int Max_who = number[1];
        int now_pos = 2;
        while(now_pos <= n)
        {
            int sum = 1;
            int who = number[now_pos];
            while(number[now_pos-1] == number[now_pos])
            {
                now_pos++;
                sum++;
            }
            now_pos++;
            if(sum > Max_num)
            {
                Max_num = sum;
                Max_who = who;
            }
        }
        cout << Max_who << " " << Max_num << endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/zhaiqiming2010/article/details/80022083
2-1