假设我们有这两个数据数组
{5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,5}}
{5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4}
在我找出候选人之后,我创建了一个函数,然后确定该候选者是否确实是数组中的多数元素。对于第一个数组示例,它工作正常,但对于第二个数据示例则不然。
for (int i = 0; i < sz; i++){
if (arr[i] == mElement){
count++;
}
}
if (count> sz/2){
majority = mElement;
return true;
}
else{
return false;
}
对于第二个数组,多数元素显然应为4但是我的代码保持返回5.在计数达到10之后,它应该切换到查看4是否是多数元素。
任何人都可以请帮助并指出我帮助我解决这个问题的方向吗?非常感激!
答案 0 :(得分:0)
您将要跟踪您看到每个号码的次数。此问题的最佳解决方案是使用Hashmap。
我不确定你在哪里确定mElement的价值。您的代码如何知道在10处切换到4作为多数元素。在执行的这一点上,无法知道数组其余部分中的数字。
int max_element( const vector<int>& arr ){
map<int, int> total;
for( int i = 0; i < arr.size(); i++){
total[arr[i]]++;
}
int cur_max = 0;
int max_num = 0;
for( auto it = total.begin(); it != total.end(); ++it){
if ( it->second > cur_max ){
cur_max = it->second;
max_num = it->first;
}
}
return max_num;
}
每次都可以使用