Leetcode 169. 多数元素 哈希计数 / 排序 / 摩尔投票
原题链接:Leetcode 169. 多数元素
1. 哈希计数
class Solution {
public:int majorityElement(vector<int>& nums) {int n=nums.size();unordered_map<int,int> mp;for(auto &x:nums){mp[x]++;}for(auto &x:mp){if(x.second>n/2) {return x.first;}}return 1;}
};
2. 排序法
将数组 nums 排序,数组中点的元素 一定为众数。
class Solution {
public:int majorityElement(vector<int>& nums) {sort(nums.begin(),nums.end());int n=nums.size();return nums[n/2];}
};
3.摩尔投票
参考:O(n) 武林大会打擂台,严谨证明(Python/Java/C++/C/Go/JS/Rust)
class Solution {
public:int majorityElement(vector<int>& nums) {int votes = 0;int x;for(int i=0;i<nums.size();i++){if(votes==0){x=nums[i];votes=1;}else {votes += (x==nums[i]) ? 1:-1;}}return x;}
};