• 队列实现max操作,要求尽量提高效率。


    结合之前实现的 maxStack 和 用两个stack 实现一个Queue, 实现 MaxQueue

    import java.util.Stack;
    
    public class MaxQueue {
        MaxStack in = new MaxStack();
        MaxStack out = new MaxStack();
    
        public void enqueue(Integer a) {
            in.push(a);
        }
    
        public Integer dequeue() {
            shiftItems();
            return out.pop();
        }
    
        public Integer peek() {
            shiftItems();
            return out.peek();
        }
    
        public Integer max() {
            return Math.max(in.isEmpty() ? Integer.MIN_VALUE : in.max(), out.isEmpty() ? Integer.MIN_VALUE : out.max());
        }
    
        private void shiftItems() {
            if (!out.isEmpty())
                return;
            while (!in.isEmpty()) {
                out.push(in.pop());
            }
        }
    
        public static void main(String[] args) {
            MaxQueue queue = new MaxQueue();
            queue.enqueue(1);
            System.out.println(queue.max());
            queue.enqueue(2);
            System.out.println(queue.max());
            queue.enqueue(3);
            System.out.println(queue.max());
            queue.enqueue(4);
            System.out.println(queue.max());
            queue.dequeue();
            System.out.println(queue.max());
            queue.dequeue();
            System.out.println(queue.max());
            queue.dequeue();
            System.out.println(queue.max());
    
        }
    }
    
    class MaxStack {
        Stack<Integer> val = new Stack<Integer>();
        Stack<Integer> max = new Stack<Integer>();
    
        public boolean isEmpty() {
            return val.isEmpty();
        }
    
        public void push(Integer a) {
            val.push(a);
            if (max.isEmpty() || a >= max.peek())
                max.push(a);
        }
    
        public Integer pop() {
            Integer out = val.pop();
            if (out == max.peek())
                max.pop();
            return out;
        }
    
        public Integer peek() {
            return val.peek();
        }
    
        public Integer max() {
            return max.peek();
        }
    }
  • 相关阅读:
    PL/SQL Developer保存自定义界面布局
    SQL Server 2008中SQL增强之二:Top新用途
    泛型和集合
    Go语言
    软件架构师培训
    using的几种用法
    【十五分钟Talkshow】如何善用你的.NET开发环境
    心的感谢
    【缅怀妈妈系列诗歌】之四:妈妈,对不起
    PDA开发经验小结 (转共享)
  • 原文地址:https://www.cnblogs.com/jdflyfly/p/3923631.html
Copyright © 2020-2023  润新知