私は数のベクトルを持っています std::vector numbers; パラメータのように渡されたいくつかの数の最大のシーケンスを見つける方法は?たとえば、0、1、1、3、2、0、0、0、6、0、0があり、 0の数値を 探している場合、この場合は開始インデックス5を取得する必要があります。この問題に対してstlまたはboostで達成するいくつかの機能または組み合わせはすでにありますか?(C ++ 11は使用できません)
質問する
151 次
3 に答える
1
各メンバーを反復処理するときに、ベクトル内の実行をブルートフォースでカウントするよりもうまくいくとは思いません。
于 2012-11-18T00:37:03.347 に答える
1
これには本当にlib関数を使用する必要がありますか?
簡単なアプローチ-そして私は手元にこれ以上効率的なものは見当たりません-は、最初の数字を選び、それが順番に現れる限りそれを数えることです。
別の番号が表示された場合は、別の番号が表示されるまでカウントし、最後の番号の頻度をカウントしたばかりの番号と比較し、常に最も頻度の高い番号を維持し、リストの最後に到達するまでこれを実行します- -または、リストのサイズとリスト内の位置を考えると、すでに最も頻繁に使用している番号よりも、順番に頻繁になる番号はないことを確認できるまで。
于 2012-11-18T00:38:25.310 に答える
1
これを行う標準関数はないと思いますが、比較的簡単なアルゴリズムをプログラムできます。
int max_len = -1;
int best_index = -1;
int count = 0;
vector<int> data;
int value;
// Set the data and value here...
for (int i = 0 ; i != data.size() ; i++) {
if (data[i] == value) {
count++;
} else {
if (count > max_len) {
best_index = i - count;
max_len = count;
}
count = 0;
}
}
if (count > max_len) {
best_index = i - count;
max_len = count;
}
于 2012-11-18T00:43:23.033 に答える