end既に配列の終わりであるならば、中断してください。cntインクリメントしcnt。cur[array[end]]。1は、現在のサブシーケンスに別の要素があることを意味します)。end]間隔を現在の回答と比較し、それが良い場合は保存します。さらなるプロセスが不可能になった後、あなたは答えを得た。アレイに2つのインターレーターを渡すだけです。Sのすべての要素を含む最小長の部分列を見つけ出す必要があります(重複はなく、注文は関係ありません)。5つの異なる要素があります。最小長の部分列には、これら5つの要素すべてが含まれていなければなりません。ここには、O(N)時間とO(N)時間を必要とするアルゴリズムがあります。Gevorgyanによるものと似ています。フラグの補助O(N)配列も使用します。このアルゴリズムは、固有の要素の最長のサブシーケンスを見つける。numUnique場合、すべての一意の要素を含むサブシーケンスはありません。アルゴリズムは、要素が正の数であり、最大要素がシーケンスの長さよりも短いことを前提としています。同じシーケンスと異なるセットに対してこれを頻繁に行う必要がある場合は、これに対して反転リストを使用することができます。シーケンスの反転リストを準備し、すべてのオフセットを収集します。次に、逆順リストから結果をスキャンして、m個の連続番号のシーケンスをスキャンします。クエリのサイズをmとすると、準備はO(n)ます。私がマージ・ステップを誤算していない場合、クエリの応答時間はO(m^2)になります。Kurthによる論文をご覧ください。これは、あなたの仕事に適応できる一般的なデータベースフレームワークを描いています。明らかに、アイテム3だけがトリッキーです。Dから各要素にキーを割り当て、その要素を値として持つ優先順位キュー/ヒープを使用します。それとは別に、ヒープ内の要素に値(要素へのポインタを持つマップ)でアクセスできるデータ構造が必要です。キーは常に要素の最後の位置でなければなりません。O(1)を調べて配列に書き込みます。n)でなければなりません。私は何も見逃さないことを願っています。それはちょうど私の心に来たので、塩の粒でそれを取るか、またはコミュニティが私が作った可能性のある間違いを指摘させる。