この質問はこれに似ています。違いは、 Min- Heapの代わりにバイナリの Max-Heapがあることです。これにより、質問がまったく異なります。
私の考え:
1) すべてのノードを調べて 2 番目に小さい要素を見つけます。これには O(n) かかります
2) 2 番目に小さい要素を見つけたら、その要素をバブルアップし、ルートに到達するまで親と交換します。これには O(logn) がかかります。
3)ルートから要素を削除し、最も右の要素を取得してルートの場所に保存します(通常のヒープ削除操作)。これにはO(logn)がかかります
合計は O(n) + O(logn) + O(logn) となり、これは O(n) です。
編集:バイナリを追加
それよりも良い解決策はありますか?