算法

LCR 184. 设计自助结算系统

2024-01-01  本文已影响0人  红树_

重视自己生命的人,就会重视时间,因为时间不只等于金钱,更等于生命。

题目

LeetCode题目,参考LCR 184. 设计自助结算系统
请设计一个自助结账系统,该系统需要通过一个队列来模拟顾客通过购物车的结算过程,需要实现的功能有:

注意,为保证该系统运转高效性,以上函数的均摊时间复杂度均为 O(1)

解题思路

辅助队列 16ms

class Checkout {
    // 队列实现增加和移除操作 同时用辅助队列维护区间最大值
    // 辅助队列:每次入队时,辅助队列入队会先把尾部小于入队的元素弹出
    // 每次出队时,若辅助队列队首也就是最大值等于出队元素,辅助队列也出队
    LinkedList<Integer> list = new LinkedList<>();
    LinkedList<Integer> help = new LinkedList<>();

    public Checkout() {
    }
    
    public int get_max() {
        if(list.size() == 0) return -1;
        return help.peekFirst();
    }
    
    public void add(int value) {
        list.add(value);
        while(help.size() > 0 && help.peekLast() < value) help.removeLast();
        help.add(value);
    }
    
    public int remove() {
        if(list.size() == 0) return -1;
        int h = list.peekFirst();
        if(h == help.peekFirst()) help.removeFirst();
        return list.removeFirst();
    }
}

/**
 * Your Checkout object will be instantiated and called as such:
 * Checkout obj = new Checkout();
 * int param_1 = obj.get_max();
 * obj.add(value);
 * int param_3 = obj.remove();
 */

复杂度分析

2023-1-2

上一篇 下一篇

猜你喜欢

热点阅读