多数元素不计算元素?

时间:2016-02-21 17:09:27

标签: c++ arrays element

假设我们有这两个数据数组

{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是否是多数元素。

任何人都可以请帮助并指出我帮助我解决这个问题的方向吗?非常感激!

1 个答案:

答案 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;
 }

每次都可以使用