map
//输入一堆数字 看一堆数中最少有多少个上升子串(不连续的子串)
//每个串去掉一串最长的 再去掉一串次长的。
//到最后肯定剩下某个出现次数最多的数字?
//所以本题就是找那个数字出现的最多 最多的次数是多少
//因为数太大数组存不下 所以用map
# include<stdio.h>
# include<map>
# include<algorithm>
# include <string>
using namespace std;
int main()
{
int n;
__int64 a,max;
map<__int64,__int64>q;
while(~scanf("%d",&n))
{
q.clear();
while(n--)
{
scanf("%I64d",&a);
q[a]++;
}
map<__int64,__int64>::iterator it;
max=0;
//it->first 为a,it->second为 q[]++;
//iterator->first 关键字(key)
//iterator->second 存储的数据(value)
for(it=q.begin();it!=q.end();it++)
{
if(max<it->second)
max=it->second;
}
printf("%I64d\n",max);
}
return 0;
}暴力
# include <stdio.h>
# include <string>
# include <algorithm>
using namespace std;
int main()
{
int a[3010],flag[3010];
int n,i,min,cot,count;
while(~scanf("%d",&n))
{
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,a+n);
memset(flag,0,sizeof(flag));
cot=0;
count=0;
while(1)
{
cot++;
for(i=0;i<n;i++)
{
if(!flag[i])
{
min=a[i];
flag[i]=1;
count++;
break;
}
}
for(i=0;i<n;i++)
{
if(!flag[i]&&a[i]>min)
{
min=a[i];
flag[i]=1;
count++;
}
}
if(count==n)
{
printf("%d\n",cot);
break;
}
}
}
return 0;
}
本博客介绍了一个算法,用于找出输入数字序列中出现频率最高的元素,通过使用map数据结构来解决这个问题。

被折叠的 条评论
为什么被折叠?



