PAT-1054

来源:互联网 发布:淘宝购车靠谱吗 编辑:程序博客网 时间:2024/06/03 20:41

title:找出超过半数的元素

1.该题求出现次数超过一半的元素,故采用moore voting算法,moore投票法

2.遇到不同的元素,如果出现次数为0,更跟换成当前元素,如果次数不为0则-1,

3.遇到相同元素,出现次数相加

4.最终记录的元素就是所求元素

//moor voting#include <iostream>#include <cstdio>using namespace std;int main(){    int n,m;    int tmpnum,count,num=-1;    scanf("%d%d",&n,&m);    for(int i=0;i<m;i++)    for(int j=0;j<n;j++)    {        scanf("%d",&tmpnum);        if(tmpnum!=num)        {            if(count==0)            num=tmpnum;            else            count--;        }        else        count++;    }    cout<<num<<endl;    return 0;}

map  做法:

/*用C++读数据会超时,要用C读。*/#include<iostream>#include<stdio.h>#include<map>using namespace std;int main(){int i,j,n,m,num;map<int,int>mp;map<int,int>::iterator it;cin>>n>>m;for(i=0;i<m;i++){for(j=0;j<n;j++){scanf("%d",&num);mp[num]++;}}for(it=mp.begin();it!=mp.end();it++){if(it->second>(n*m/2)){cout<<it->first<<endl;break;}}return 0;}





0 0