题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。
详见《编程之美》的2.3寻找发帖水王。
#include <iostream>
using namespace std;
int Find(int *a, int N)//出现次数超过一半的数字
{
int candidate;
int nTimes, i;
for(i=nTimes=0; i<N; i++)
{
if(nTimes==0)
{
candidate=a[i];
nTimes=1;
}
else
{
if(candidate==a[i])
nTimes++;
else
nTimes--;
}
}
return candidate;
}
void main()
{
int a[5]={0,1,2,1,1};
cout<<Find(a, 5)<<endl;
}