public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
unordered_map<int, int> m;//方法一:哈希法,将数据出现次数存放在以哈希表为底层的数据结构中,缺点:空间换时间
int ans;
for(auto nums:numbers)
{
++m[nums];
if(m[nums]>numbers.size()>>1)
{
ans=nums;
}
}
return ans;
sort(numbers.begin(),numbers.end());//方法二:排序法,将数组排序后,出现次数超过数组一半的数据必然出现在数组中间位置
return numbers[numbers.size()>>1];
vector<int> vis(10001,0);//方法三:标记法,类似于桶排序的方法,将数据出现次数放入到向量组中,缺点:需要提前申请内存来,可能导致内存使用不充分
int ans;
for(auto nums:numbers)
{
++vis[nums];
if(vis[nums]>numbers.size()>>1)
{
ans=nums;
}
}
return ans;
int cnt=0;//方法四:登记法,使用整数型变量记录出现次数,使用另一个整型变量存放数据,缺点:需要遍历数组
int res=0;
for(int i=0;i<numbers.size();++i)
{
if(cnt==0) res=numbers[i];
cnt+=(numbers[i]==res)?1:-1;
}
return res;
}
};