很明显,是个水题,可惜我更水,错了好多次,刚好今天练习了第二短路的条数,

所以,求第二高频率还是很得意很快的写出来了,然后就不停的WA……

中间我想省略掉一次哈希的遍历,于是每次hash[an]++后就直接和Max,sec比较

记录,但是这样的话,sec永远与Max只是差1,因为最高的频率是一个一个加上来的

所以每次替换,Max只是加1,所以是错的……

/*
    题意:找出所有数中出现频率第二高的,如果有很多第二高的,那么按升序输出

    思路:快排+哈希
    2011-7-16
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <climits>
#include <algorithm>
#include <functional>
#include <cstdlib>
#include <queue>
#include <vector>
#include <stack>
using namespace std;
int hash[10005];
int n, m;

int main()
{
 while(scanf("%d%d", &n, &m), n&&m)
 {
     memset(hash, 0, sizeof(hash));
     int Max=0, sec=0, an;
     for(int i=0; i<n; i++)
     {
         for(int j=0; j<m; j++)
         {
             scanf("%d", &an);
             hash[an]++;
             /*
             if(hash[an]>Max)
             {
                 sec=Max;
                 Max=hash[an];
             }
             */
         }
     }
     for(int i=0; i<10001; i++)
     {
         if(hash[i]>Max)
         {
             sec=Max;
             Max=hash[i];
         }
         if(hash[i]<Max && hash[i]>sec)
                sec=hash[i];
     }
     int flag=1;
        for(int i=0; i<10001; i++)
        {
            if(flag &&sec==hash[i])
            {
                printf("%d", i);
                flag=0;
            }
            else if(sec==hash[i])
            {
                printf(" %d", i);
            }
        }
        printf("\n");
 }
 return 0;
}

posted on 2011-07-16 22:09  FreeAquar  阅读(304)  评论(0编辑  收藏  举报