L1-034 点赞 (20 分)
4
3 889 233 2
5 100 3 233 2 73
4 3 73 889 2
2 233 123
输出样例:
233 3
这一题用到了hashTable的思想。
当我们要判断一个数字或字符是否出现过,我们就可以使用hashTable。简单来说,以空间换时间,这也是我看了哈希表之后,对哈希表的一种应用。
从代码上看,我们先开一个能包括所有情况的数组并初始化,在输入题目要求的Fi时,我们让输入的每一个数,直接对应在数组索引,每次输入一个数,这个数对应的位置就加1。这样即完成了对次数的统计。说白了,就是映射
最后,我们按照题目要求对映射对应的数组进行遍历,如果数组位置上是0,直接跳,然后找到咱们的最大值(这个应该都不难),如果有相同最大值,输出索引大的那个,完毕。
#include <iostream>
using namespace std;
int main()
{
int n;
int flag[1001] = { 0 };
int k, f;
int i, j;
int max, maxi;
cin >> n;
for (i = 0; i < n; i++)
{
cin >> k;
for (j = 0; j < k; j++)
{
cin >> f;
flag[f]++;//这里要注意
}
}
max = flag[0];
for (i = 0; i < 1001; i++)
{
if (flag[i] == 0)
continue;
else
{
if (flag[i] > max)//找最大值
{
max = flag[i];
maxi = i;
}
}
if (flag[i] == max && i > maxi)//最大值相同,输出索引大的
{
maxi = i;
}
}
cout << maxi<< " " << max << endl;
return 0;
}