これは最近インタビューで尋ねられた質問です。私はまともな解決策を思いついたが、私のインタビュアーによって良いことが言われた。IsOn(i)とToggle(i、j)に答える理想的なデータ構造 - HashSetよりも優れている必要があります
n個の電球があることを想像してみてください。最初はすべてがオフになっています。理想的な時間のANS空間複雑に2つのクエリに答えるためのアプローチを設計します。
(1)ISON(I) - 変更 - 要素は 'i' は
(2)トグル(i、j)の上にある場合はtrueを返します範囲[i、j](包括的)内のすべての要素の状態。
- 初期解決策:配列。 O(1)のIsOn、O(j-i)のトグル、O(N)の空間複雑さ。
- 解決策:オンになっているすべての要素を保持するハッシュセット。 IsOnはまだO(1)ですが、ToggleはまだO(j - i)ですが、空間の複雑さははるかに優れています。
私は、私はよりよい解決策、上にある要素の範囲を保存するに関係しているものを見つける必要があることを言われた - しかし、私はそれを理解するために苦労しています。
両方の操作はO(log n)で実行できます。私は今、データ構造の名前を覚えていません。 –
ほとんどの場合、https://en.wikipedia.org/wiki/Interval_tree – algrid