系列目录:
文图介绍
上图所示:元素11的数量超出了数组的一半
11 11 11 17 19
11 12 13 11 19 上图所示:没有元素的数量超出了数组的一半
一、实现算法思想:
从前向后扫描数组元素,标记出一个可能成为超出的值mainNum。然后重新计数,确认mainNum是否超出。
- 选取mainNum,记录mainNum出现的次数为1;若下个数仍等于mainNum,则计数加1,否则减1;当计数为0时,下一个数保存到mainNum中,计数为1,开始新一轮计数,重复上述过程,扫描全部数值为止。
- 判断mainNum中的元素是否是真正的超出的元素。再次扫描数组,统计mainNum中元素出现的次数,若大于n/2,则返回超出的值,否则返回-1。
提示:自己动手画图后思路更加清晰 !
二、实现代码
int Majority(int A[], int n)
{
int mainNum = A[0];
int count = 1;
for (int i = 1; i < n; i++)
{
if (A[i]==mainNum)
{
count++;
}
else
{
count--;
}
if (count==0)
{
i++;
mainNum = A[i];
count = 1;
}
}
count = 0;
for (int j = 0; j < n; j++)
{
if (mainNum==A[j])
{
count++;
}
}
if (count > n / 2)
{
return mainNum;
}
else
{
return -1;
}
}
三、运行结果
自己给一个数组试一下吧!
四、总结
以上就是本章要讲的内容,本文简单介绍了是否有数组元素超出了数组个数的一半,提供了能使我们快速便捷地思路和方法。