HDU 1029 高频词统计

来源:互联网 发布:java线程池工作原理 编辑:程序博客网 时间:2024/04/30 05:40

1,最自然的想法,使用map记录每个词出现的次数

#include<stdio.h>#include<iostream>#include<map>using namespace std;int main(){int n;while(scanf("%d",&n)!=-1){map<int,int> m;int i;int lim=(n+1)/2;for(i=0;i<n;i++){int temp;scanf("%d",&temp);m[temp]++;}map<int,int>::iterator iter;for(iter=m.begin();iter != m.end();iter++){if(iter->second>=lim){printf("%d\n",iter->first);break;}}}return 0;}

2. 使用哈希,缺点是如果输入为负数处理不了

#include<stdio.h>int hash[100000];int main(){int n,i,t;while(scanf("%d",&n)!=EOF){for(i=0;i<100000;i++)hash[i]=0;for(i=1;i<=n;i++){scanf("%d",&t);hash[t]++;}for(i=1;;i++)if(hash[i]>=(n+2)/2){printf("%d\n",i);break;}}}


3. 空间,时间复杂度最低的做法

#include<stdio.h>int main(){int i,n,num,currnum,ans;while(scanf("%d",&n)!=EOF){scanf("%d",&num);currnum = num;ans = 1;for(i = 1 ; i < n; i ++){scanf("%d",&num);if(ans == 0)currnum = num,ans ++;else if(num != currnum){ans --;}else if (num == currnum)ans ++;}printf("%d\n",currnum);}return 0;}


原创粉丝点击