摩尔投票是用于找出一串数据中,数量多于数据一半的数
例题:
数组中占比超过一半的元素称之为主要元素。给你一个 整数 数组,找出其中的主要元素。若没有,返回 -1 。请设计时间复杂度为 O(N) 、空间复杂度为 O(1) 的解决方案。
class Solution {
public:
int majorityElement(vector<int>& nums) {
int candidate = -1;
int len = nums.size();
int cnt = 0;
for(auto num : nums)
{
if(num == candidate) cnt++;
else if(!cnt) candidate = num , cnt++;
else cnt--;
}
if(cnt == 0) return -1;
cnt = 0;
for(auto num : nums) if(num == candidate) cnt++;//验证投票是否有效
return cnt > len / 2 ? candidate : -1;
}
};