给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋
的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:
输入: [3,2,3] 输出: 3
示例 2:
输入: [2,2,1,1,1,2,2] 输出: 2
这个题目有一个经典的算法,就是摩尔投票法,摩尔投票法的背景是,假设有这样一个场景:票选村长,每人可投一票,我们将候选村长从1开始编号,村民们在票上写上候选村长的编号即可完成投票。那么最后统计的票可形成一个整型数组。那么谁是村长呢?票数过半的那个人。
摩尔投票法的思路,实际上一种类似抵消法
class Solution {
public:
int majorityElement(vector<int>& nums)
{
int temp = nums[0];
int count=1;
int n = nums.size();
for(int i=1;i<n;i++)
{
if(nums[i]==temp)
{
count++;
}
else
{
count--;
if(count==0)
{
temp = nums[i]; // 更换temp
count=1;
}
}
}
return temp;
}
};