2016-05-27 16 views
-2

私はコレクションがたくさんあります。これらのアイテムにはいくつかのプロパティがありますが、この場合2つが重要であるとします。 利用可能および優先度。使用可能なのは単純なブールプロパティですが、優先順位は1から100の範囲の任意の数にすることができます。達成する必要があるのは、n個のアイテムが連続していて、すべてが使用可能(== true)で、 。 コレクションのみを使用することに限定されません。つまり、検索プロセスを高速化するためにデータ構造を追加することができます(101010001などのアイテムのステータスを示すバイト配列など)。私はそれを少し視覚化する必要がある場合コレクション内の同じプロパティを持つアイテムを検索する

1 [99]、0 [80]、1 [60]、1 [60]、0 [60]

1と0を示し括弧内の数字は優先度を示しています。私は3番目と4番目のアイテムを見つける必要があります。

このようなアルゴリズムを実装する最も速い方法は何ですか?

注:これは確かに宿題に関する質問ではありません。

EDIT:私はアイテムの順序を変更することはできませんし、コレクションからいくつかのアイテムを削除することもできません。

+0

利用可能なすべてのタスクを別のコレクションに保存し、優先度に基づいてソートしますか? –

+0

HashMapにはloopkup O(1)があります。あなたがこれよりも良くなるとは言えません。 – FallAndLearn

+0

'は順調です - あなたは順序を変更すべきではありませんか? – MBo

答えて

0

便宜的にHashMapを使用して、使用可能な要素をtrueとして保存するだけです。 HashMapのキーが優先され、値は発生回数になります。

最後にvalue > 1のキーを印刷します。

したがって、この操作はO(n)時間の複雑さで完了できます。ここで、nは要素の合計数です。

関連する問題