LC169-多数元素
作者:互联网
169. 多数元素
法1:(投票算法)
//投票算法
class Solution {
public:
int majorityElement(vector<int>& nums) {
int r, c = 0;
for (auto x: nums)
if (!c) r = x, c = 1;
else if (r == x) c ++ ;
else c -- ;
return r;
}
};
法2:哈希表统计暴力做法:
class Solution {
public:
int majorityElement(vector<int>& nums) {
int n = nums.size();
unordered_map<int,int>cnt;
for(auto c:nums){
cnt[c]++;
if(cnt[c] > n / 2)return c;
}
return -1;
}
};
法3:位运算
class Solution {
public:
int majorityElement(vector<int>& nums) {
int ans = 0;
for(int i = 0; i < 32; ++i){
int cnt = 0;
for(auto& x : nums)
cnt += (x >> i) & 1; //位运算法统计每个位置上1出现的次数,每次出现则ones+1
ans += (cnt > nums.size() / 2) << i ; //如果1出现次数大于1/2数组的长度,1即为这个位置的目标数字
}
return ans;
}
};
标签:cnt,return,nums,int,auto,元素,LC169,多数,public 来源: https://www.cnblogs.com/Ivessas/p/14992522.html