0

私は数のベクトルを持っています std::vector numbers; パラメータのように渡されたいくつかの数の最大のシーケンスを見つける方法は?たとえば、0、1、1、3、2、0、0、0、6、0、0があり、 0の数値を 探している場合、この場合は開始インデックス5を取得する必要があります。この問題に対してstlまたはboostで達成するいくつかの機能または組み合わせはすでにありますか?(C ++ 11は使用できません)

4

3 に答える 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 に答える