0

私の中に次のシーケンスがあるとしますArrayList<Integer>

1 2 3 4 1 2 3 4 5 6

シーケンス (1,2,3,4) がリストに何回表示されるかを知る必要があります。

この例では、答えは 2 です。

2 つのソリューションが必要です。1 つは数字が次のシーケンス (1,2,3,4) である必要があり、もう 1 つはシーケンスに従わずに (4,1,2,3)

私はJavaを使用しています、事前に感謝します。

私が試したこと: シーケンスを確認し、それが正しい場合:

        AnotherList.add(Integer.valueOf(1));
        AnotherList.add(Integer.valueOf(2));
        AnotherList.add(Integer.valueOf(3));
        AnotherList.add(Integer.valueOf(4));
        if(TheList.containsAll(AnotherList))
            TheList.removeAll(AnotherList);

しかし、それを行うと、リストにあるすべての 1、2、3、および 4 が削除されます。

4

1 に答える 1

1

カウントをオーバーラップできないという前提で(したがって、リスト内の 1,1,1,1 と (1,1,1) はシーケンスとして 1 になります)。

アルゴリズムで、自分でコーディングできるようにします (問題の確実な進展が見られるまで、疑似コードは提供しません):

ループを使用して、リスト内の現在の番号がシーケンスの最初の番号と一致するかどうかを確認します。一致しない場合は、リストの次の番号に移動します。一致する場合は、リスト内の次の番号に移動しますが、次の番号に順にインクリメントします。連続するすべての数字が一致する場合は、カウントに 1 を追加します。リストの最後に到達した後のカウントを返します。

2 番目の部分では、シーケンスのすべての組み合わせのリストを作成します (スタックまたは再帰を使用します)。前と同じことを行いますが、完全に一致するまで組み合わせリストのすべての項目を比較します。一致したら、リスト内の最後に一致した文字の最後にジャンプして繰り返します。

于 2013-09-04T00:57:38.117 に答える