概念:
摩尔投票算法是一个比较冷门的算法,一般都是用来解决绝对众数问题,绝对众数就是其在整个数组元素中,个数大于n/2(n表示整个数组长度)。
算法步骤;
首先先确定数组的第一个元素作为当前查找元素,然后向后遍历,当遇到相同元素就让计数器加1,遇到不同的元素就让计数器减1,当计数器的值减为0时,则当前的元素值并不是绝对众数,则换下一个元素作为当前查找元素,然后重复上面的操作。当遍历完整个数组后,计数器还不为0 ,则该数就是绝对众数。
该算法的时间复杂度为O(n),空间复杂度较高效。
代码演示:
int majorityElement(int* nums, int numsSize){
int count= 0;//计数器
int num = nums[0];//假定当前值为查找对象
for(int i = 0;i<numsSize;i++)
{
if(nums [i] == num)
{
count++;
}
else
{
count--;
if(count < 0)//当计数器的值小于0,则表示该值并不是绝对众数,则更换对象,计数器归为1
{
num = nums[i];
count = 1;
}
}
}
return num;
}