在O(n)的时间内找出数组中超过一半的数,如:3 4 2 3 5 3 3,数字3超过半数
bool g_b = false; //全局变量用来判断是不是数组中的数
int MoreThanHalfNum(int a[], int len)
{
bool b = false;
if (a == NULL || len <= 0)
{
g_b = true;
return -1;
}
int k, iCount = 0;
for (int i = 0; i < len; i++)
{
if (iCount == 0)
{
k = a[i];
iCount = 1;
}
else
{
if (a[i] == k)
iCount++;
else
iCount--;
}
}
//很多人写完上面的代码,觉得没问题了,其实不然,如:1、2、3;iCount为1,能说明3超过一半吗
if (iCount == 0) //iCount为0,说明没有
{
g_b = true;
return -1;
}
iCount = 0;
for (int i = 0; i < len; i++) //计算上面k的数目
{
if (k == a[i])
iCount++;
}
if (k > len / 2) //大于板书才说明真的超过一半
return k;
else
{
g_b = true;
return -1;
}
}