微軟等數據結構+算法面試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;
}