1

整数の配列が 2 つある場合:

a = {2,2,3,3,5,6,7,2,2,2}b = {6,-5,2,2,2,2,4,5,3,3}

連続するシーケンスの数を定義する integerk = 2と (両方の配列で同じ - [2,2], [3,3], [2,2,2]in "a" / [2,2,2,2], [3,3]in "b" )、数値のシーケンスごとに個別のカウントを実行するにはどうすればよいですか?

私はこのようにアルゴリズムを考えました:

int count = 1;  
for (int i=0; i<N; i++){
    if ( a[i] == a[i+1] && b[i] == b[i+1] && a[i] == b[i] ){
        count++;
    }

    if ( count >= k ){
        condition = true;
    }
}

要素のシーケンスごとに「カウント」を 1 つずつ開始すると、カウントが正確になることが保証されますが、この方法では、 array の 2 番目と 3 番目の位置をチェックするときに、で停止するのではなくa、要素もカウントします。32

助言がありますか?

4

1 に答える 1

2

k「関数はブール値です」というコメントを見て、同じ長さ以上のシーケンス、つまり両方の入力配列のサブシーケンスがあるかどうかを調べたいと思います。

サブシーケンスは、両方の配列の同じ位置に表示される必要はないようです(そうでない場合、演習はあまり面白くありません)。

私の推測が正しいと仮定すると、次のアイデアを使用できます。

  1. 位置のすべてのペアを確認します(p1,p2)。ここp1で、は最初の配列p2の位置であり、は2番目の配列の位置です。
  2. 0...N-kオーバーフロー(配列の終わりを超えて読み取る)を回避するために、位置の範囲を使用します
  3. 位置のペアごとにk、これらの位置から始まる番号が同じであるかどうかを確認します
  4. それらが少なくとも1組の位置で同じである場合、結果はtrue;になります。そうでなければfalse

次のように、2つのネストされたループを使用して(1)と(2)を実装できます。

for (p1 = 0; p1 <= N - k; ++p1)
{
    for (p2 = 0; p2 <= N - k; ++p2)
    {
        ...
    }
}

別の関数またはネストされたループを使用して、条件(3)を確認できます。

于 2012-08-13T20:00:11.513 に答える