题目:
分析:自己没想到,是摩尔投票法:
知乎很形象的解释,不用多说。
提醒:摩尔投票法的前提是存在严格大于一半的。因此最后需要进行验证。
代码:
class Solution {
public:
int majorityElement(vector<int>& nums) {
if(nums.size()==0) return -1;
if(nums.size()==1) return nums[0];
int n1=nums[0],n2=1;
for(int i=1;i<nums.size();i++)
{
if(nums[i]==n1) {
n2++;
continue;
}
n2--;
if(n2==0)
{
i++;
if(i==nums.size()) return 0;
n1=nums[i],n2=1;
}
}
n2=0;
for(int i=0;i<nums.size();i++)
{
if(n1==nums[i]) n2++;
}
if(n2>=nums.size()/2+1) return n1;
return -1;
}
};