微软等数据结构+算法面试100题 第74题
题目:数组中有一个数字出现的次数超过了数组长度的一半,找出这个数字。
分析:这是一道广为流传的面试题,包括百度、微软和Google在内的多家公司都
曾经采用过这个题目。要几十分钟的时间里很好地解答这道题,
除了较好的编程能力之外,还需要较快的反应和较强的逻辑思维能力。
struct node
{
int nCnt;
int data;
bool bUse;
};
int findmorenum(int * p, int n)
{
int m = n/2 + 1;
node * ptmp = new node[m];
memset(ptmp, 0, sizeof(node)*m);
int j;
for(int i=0;i<n;i++)
{
j=0;
while(j<m)
{
if(!ptmp[j].bUse)
{
ptmp[j].data = p[i];
ptmp[j].bUse = true;
}
if(ptmp[j].data==p[i])
{
ptmp[j].nCnt++;
if(ptmp[j].nCnt>=m)
return ptmp[j].data;
break;
}
j++;
}
if(j==m)
break;
}
delete []ptmp;
return -1;
}