给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。可以假设数组是非空的,并且给定的数组总是存在多数元素。
输入:[3,2,3] 输出:3
一、投票法
根据自己的理解,设定一个cnt用于计数,一个val用于保存众数。那么对于一个在数组中个数大于一半的众数来说,其计票为+1,而其余数都为-1。经过加减之后cnt的值一定是大于0。而一开始我们并不知道哪个是众数,因此我们假设第一个元素是“众数”那么就+1,之后不同的就-1,直到cnt=0的时候,这时在这个数之前的“众数”的个数已经和不是“众数”的数抵消了。就算“众数”不是真正的众数,由于抵消的原因,其最后在cnt=0时右边的值总归是众数。
代码:
int majorityElement(vector<int>& nums) {
int cnt = 0, val = 0 ;
for (const auto& v : nums)
{
if (cnt == 0)
{
val = v;
}
if (val == v)
{
cnt++;
}
else
{
cnt--;
}
}
return val;
}