很明显,是个水题,可惜我更水,错了好多次,刚好今天练习了第二短路的条数,
所以,求第二高频率还是很得意很快的写出来了,然后就不停的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;
}