主元素有关问题

主元素问题

RT,找数组中出现次数大于一半的数,没有输出0。

具体解法见《编程之美》发帖水王。

http://codeup.cn/problem.php?id=2161 已AC 

ps:关于没有主元素的情况,我的想法是存一个数组里然后再遍历一次,暂时没想到不用数组存的方法。。

cpp代码:

#include<iostream>
#define MAXN 10000
using namespace std;
int main(){
    int n,i,candidate,cur,ntimes;
    int num[MAXN];
    while(cin>>n){
        ntimes=0;
        for(i=0;i<n;i++){
            cin>>cur;
            num[i]=cur;
            if(ntimes==0)candidate=cur;
            if(cur==candidate)ntimes++;
            else ntimes--;
        }
        int _count=0;
        for (i=0;i<n;i++){
            if(candidate==num[i])_count++;
        }
        if(_count>n/2)cout<<candidate<<endl;
        else cout<<0<<endl;
    }
    return 0;
}