2017-02-22 3 views
0

私は、その配列とその長さをパラメータとして使用して、配列に含まれる整数セットのモードを見つける関数を書く方法についていません。私は配列のモードを見つける方法についてオンラインで複数のソリューションを見つけましたが、私は次のようにこの問題を解決しようとしています。ダブルアレイを使用してモードを見つけるには?

元の配列には(0、0、1、5、5 、5,7,7,7)。私は、モードを保存せずにどのような量でも最高の周波数を見つけるループを使って配列を反復し、これらの周波数を別の配列に格納したいとします。この場合、新しい配列は値(1,2,1、 1,2,3,1,2,3)。 2番目の配列の最大値を見つけることによって、私はこの場合3である最も高い周波数を見つけるでしょう。次に、元の配列を繰り返し処理し、最も高い頻度とその配列内の各値の数を比較し、一致がある場合、その値を返します。この例では5と7です。与える。ここでの基準を考えれば、与えられた配列のモードを見つけるためにこの関数をどのように書くのでしょうか? (配列がすでに昇順にソートされていると仮定できます)。

編集:私の暫定コードです。私は、元の配列の各整数の周波数を見つけ、別の配列に格納するステップまで行っています。

void findMode(int array, int size){ 
     int count = 1; 
     int freq[size]; 
     freq[0] = count; 
     for (int pass = 1; pass < size; pass++){ 
      if (array[pass] == array[pass-1]){ 
      count++; 
      freq[pass] = count; 
      } 
      else{ 
       count = 1; 
       freq[pass] = count; 
       } 
     } 
+0

'のstd ::ソート(array.begin()、array.end());'それらはまず、その後反復。 –

+0

キーを整数として、値をその出現としてマップを使用する方法について説明します。同じキーを再度表示するたびに、値を増やします。 全体を反復しない限り、どのように最大値を決定するかはわかりませんが、 編集:この質問はここでは同じことを示していますhttp://stackoverflow.com/a/9370990/1083027最大の実行カウントを維持する –

+0

待って、なぜこれをしたいですか?リスト内の最も高い数値と等しい値のリストを保持し、最大値よりも高い値を見つけたらそれを拭き取ってみませんか? –

答えて

0

あなたは、その後数と最も多い数の線形検索を取得するためにstd::mapを使用することができ、いくつかの余分なストレージ(潜在的にO(N)ストレージを)気にしない場合。

#include <algorithm> 
#include <cstddef> 
#include <iostream> 
#include <map> 
#include <vector> 

template<class InputIterator> 
auto mode(InputIterator first, InputIterator last) 
{ 
    using key_type = typename std::iterator_traits<InputIterator>::value_type; 
    std::map<key_type, std::size_t> counts; 
    for (auto it = first; it != last; ++it) { 
     counts[*it]++;  
    }  
    return *std::max_element(counts.cbegin(), counts.cend(), [](auto const& lhs, auto const& rhs) { 
     return lhs.second < rhs.second; 
    }); // return mode + frequency 
} 

int main() { 
    auto v = std::vector<int> { 0, 0, 1, 5, 5, 5, 7, 7, 7 }; 
    auto m = mode(v.cbegin(), v.cend()); 
    std::cout << m.first << ": " << m.second; 
} 

Live Example //プリント5:3

関連する問題