私の解決策:
1. unordered_mapを使用して各値の出現回数を記録し、配列の長さの半分に等しい場合はその数を返します
class Solution {
public:
int majorityElement(vector<int>& nums) {
int mid=(nums.size()+1)/2;
unordered_map<int,int> m;
for(int c:nums){
if(m.count(c)){
m[c]++;
if(m[c]>=mid) return c;
}
else{
m[c]=1;
if(m[c]>=mid) return c;
}
}
return 0;
}
};
2.回数が最後なので、すべての数字を足した回数よりも多い
class Solution {
public:
int majorityElement(vector<int>& nums) {
int count=0;
int res;
for(int c:nums){
if(count==0){ res=c;
count=1;
}
else{
if(res==c) count++;
else count--;
}
}
return res;
}
};