判断数组的某一个元素的数量是否超过了整个数组数量的一半

发布于:2023-01-04 ⋅ 阅读:(145) ⋅ 点赞:(0)

系列目录:

左右移动(旋转)数组元素

查找两个升序数组的中间数

合并两个有序表到新的有序表

文图介绍 

11 11 11 17 19
上图所示:元素11的数量超出了数组的一半
11 12 13 11 19

上图所示:没有元素的数量超出了数组的一半

一、实现算法思想:  

从前向后扫描数组元素,标记出一个可能成为超出的值mainNum。然后重新计数,确认mainNum是否超出。

  1. 选取mainNum,记录mainNum出现的次数为1;若下个数仍等于mainNum,则计数加1,否则减1;当计数为0时,下一个数保存到mainNum中,计数为1,开始新一轮计数,重复上述过程,扫描全部数值为止。
  2. 判断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;
	}
}

三、运行结果

自己给一个数组试一下吧!

四、总结  

以上就是本章要讲的内容,本文简单介绍了是否有数组元素超出了数组个数的一半,提供了能使我们快速便捷地思路和方法。 


网站公告

今日签到

点亮在社区的每一天
去签到