问题描述
想象一下,您是一名前厅交易员,其任务是执行交易。为简化起见,您只交易一只股票,每笔交易唯一收到的输入就是金额。由于您的后台办公室确实很急,因此您需要按顺序执行交易,以便首先执行收到的最后一个请求。此外,有时您的后台办公室可能会询问您所拥有的最小订单,但尚未执行。设计一个数据结构,可以帮助您解决这些任务。
实现支持以下操作的数据结构:
- addOrder(int amount) : adds an order
- executeOrder() : executes an Order (according to the rules above) and returns the amount associated with it
- extractMinOrder() : returns the amount of the current minimal order , without executing it
为方便起见,所有金额都可以假定为整数。
Sample inputs - Expected outputs
addOrder(13), addOrder(11), addOrder(9), addOrder(20)
extractMin() -> 9
executeOrder() -> 20
extractMin() -> 9
executeOrder() -> 9
extractMin() -> 11
addOrder(11)
extractMin() -> 11
executeOrder() -> 11
extractMin() -> 11
executeOrder() -> 11
extractMin() -> 13
executeOrder() -> 13
我能够提出两种具有以下时间复杂度的解决方案:
1- addOrder() - O(1)
executeOrder() - O(1)
extractMin() - O(n)
2- addOrder() - O(logn)
executeOrder() - O(logn)
extractMin() - O(1)
但是我被拒绝了,因为根据我的面试官的说法,我找不到最有效的解决方案-直到现在我还无法真正发现。
以上问题可以更有效地解决吗?