https://leetcode-cn.com/problems/find-majority-element-lcci/
思路:哈希可以直接做,但是空间复杂度是
O
(
n
)
O(n)
O(n)的。为了降低空间复杂度至
O
(
1
)
O(1)
O(1),我们可以使用Boyer-Moore投票算法(力扣官方题解),其核心思想是:在每一轮投票过程中,从数组中删除两个不同的元素,直到投票过程无法继续,此时数组为空或者数组中剩下的元素都相等。
- 如果数组为空,则数组中不存在主要元素;
- 如果数组中剩下的元素都相等,则数组中剩下的元素可能为主要元素。
class Solution {
public:
int majorityElement(vector<int>& nums) {
int ans=-1,cnt=0;
for(int num:nums)
{
if(!cnt)
ans=num;
if(num==ans)
++cnt;
else
--cnt;
}
cnt=0;
for(int num:nums)
{
if(ans==num)
++cnt;
}
return 2*cnt>nums.size()?ans:-1;
}
};