169.多数元素
描述
给定一个大小为 n
的数组 nums
,返回其中的多数元素。多数元素是指在数组中出现次数 大于
⌊ n/2 ⌋
的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入:nums = [3,2,3] 输出:3
示例 2:
输入:nums = [2,2,1,1,1,2,2] 输出:2
这里要讲的是投票法,这种方法是可以满足时间复杂度为 O(n)、空间复杂度为 O(1) 的要求的
思路
要引入一个概念,众数,这的众数是出现次数大于n/2的
摩尔投票法: 核心理念为 票数正负抵消 一人一票,数组长度为7的话,
就像这样了,总会有一票胜出是吧,是金子总会发光的哈哈哈哈
我们设定 数组第一个元素为候选人,然后往后遍历,相等的话,票数就+1,不相等 票数-1。
还有个判断条件就是,票数为-1,也就是票数是负数的时候,我们要把候选人改成nums[i],然后再继续遍历了 这就有点是金子总会发光的感觉了
代码
int majorityElement(int* nums, int numsSize){
int candidate=nums[0];//这是候选人,从头开始遍历嘛
int i;
int vote=0;
for(i=1;i<numsSize;i++)
{
if(nums[i]==n)
{
vote++;
}
else
{
candidate--;
if(vote<0)
{
candidate=nums[i];
vote=0;
}
}
}
return n;
}