私は興味深いアイデアを提案します:
書き込みよりも読み取りが多いにもかかわらず削除が頻繁に行われると仮定すると、前の最小値と最大値( @akaIDIOTソリューションとの違いは、これは単なる参照であるということです)。
スタック内の各値は、前の最大値と前の最小値を指します。
追加アイテムもO(1)を取り、最小値と最大値を見つけることもO(1)を取ります。
アイテムの削除はアップデートで説明されています:
欠点は、メモリ消費量が増えることです。
この解決策が間違っている場合は削除します。問題があればコメントしてください。反対票を投じる必要はありません。
アップデート
@akaIDIOTは彼のコメントの中で、私が見逃したケースについて言及しています。複数の最大値または最小値がある場合はどうなりますか。
In this case and other cases also, deleting max value will demand updating of all objects that point to it , which will be max O(n), but i think that in average it will still stay O(1).
If all values are distinct this will be always O(1)