給定連續的整數流和兩個堆棧。我想實現在O(1)複雜度下運行的extractMin操作。此操作從記錄中彈出最小元素並將其返回。基本的解決方案是使用2個堆棧保持數據逆序排序。這樣我們可以簡單地彈出包含數據的堆棧的頂層元素。但是對此,每個整數的插入都是O(N)。我可以在插入時獲得更好的複雜性,將extractMin操作保持爲O(1)。使用2個堆棧提取O(1)中的Min操作
添加例如使其更清楚:
10,-20,2,-3,-5,10,20(在任何時刻整數流)。
extractMin() // returns -20
extractMin() // returns -5
您可以推送一個數組,然後按排序順序將其彈出,以便排序下限有效。 –
是你的問題,是否有可能通過使用兩個堆棧,或者它可能使用任何合適的數據結構? – hyde
另外,你是否期望混合插入和彈出,或者先插入一切,然後開始彈出? – hyde