文章目录
- 题目描述
- 法一 哈希表
- 法二 摩尔投票
题目描述
法一 哈希表
使用哈希映射(HashMap)来存储每个元素以及出现的次数。对于哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数。
class Solution {
public:
int majorityElement(vector<int>& nums){
unordered_map<int, int> res;
int n = nums.size();
int cnt=n/2, maj=0;
for(auto&num:nums){
++res[num];
if(res[num]>cnt){
maj=num;
}
}
return maj;
}
};
法二 摩尔投票
核心理念为 票数正负抵消 。此方法时间和空间复杂度分别为 O(N) 和 O(1)
int majorityElement(vector<int>& nums){
int vote=0, x=0;
for(auto&num:nums){
if(vote==0) x=num;
vote += num==x? 1 : -1;
}
return x;
}