最後のn個の一意の番号を順番に覚えておきたい。
これが私が意味することです:n=4としましょう。
私の現在のリストは5 3 4 2
、6を追加すると、になります3 4 2 6
。代わりに3を追加すると、リストはに変わり5 4 2 3
、3が前に移動します。
私はこのようにします:番号をキューに保存します。新しい番号を追加するときは、キューを検索して番号を探します。番号が見つからない場合は、最後の番号をポップして、新しい番号を前に押します。番号が見つかった場合は、その位置の番号を削除してから、新しい番号を前に押します。
明らかに、キュー操作用に最適化された(std::deque
C ++のように)キュー内の任意の位置から数値を削除すると、非常に時間がかかります。リンクリストを使用すると、リストの検索に時間がかかります。この種のタスクを実行するためのアルゴリズムとデータ構造のより良い組み合わせはありますか?
それが何か違いを生むのであれば、私は必ずしも「最後のn個の一意の番号を順番に覚えている」ことを気にしません。特に、追加時にリストから削除された要素(存在する場合)を知る必要があります。