文章目录
Day1:
- 用两个栈实现队列
 - 包含min函数的栈
 
一、用两个栈实现队列OJ链接
本题思路:定义两个栈,(Enqueue)是用来存储入队的元素,(Cnqueue)用来出队的,那么如何进行操作呢,首先,如果插入一个数据肯定放入Enqueue中去,比较繁琐的就是出队如何实现,这里需要考虑一下如果当前Cnqueue中有元素,那么就直接返回栈顶元素即可,如果上面的不满足,就会有两种情况发生一种是Enqueue中没有元素,那么直接返回-1即可,另外一种是Enqueue中存在元素,那么需要将此时在Enqueue中的所有元素放入Cnqueue中去。
只要记住一点所有元素出队的操作都是在Cnqueue中完成即可。
class CQueue {
    public Stack<Integer> Enqueue=new Stack<>();
    public Stack<Integer> Cnqueue=new Stack<>();
    public CQueue() {}
    
    public void appendTail(int value) {
        Enqueue.push(value);
    }
    
    public int deleteHead() {
        if(!Cnqueue.isEmpty()) return Cnqueue.pop();
        if(Enqueue.isEmpty())  return -1;
        while(!Enqueue.isEmpty()) Cnqueue.push(Enqueue.pop());
        return Cnqueue.pop();
    }
}
/**
 * Your CQueue object will be instantiated and called as such:
 * CQueue obj = new CQueue();
 * obj.appendTail(value);
 * int param_2 = obj.deleteHead();
 */ 
二、包含min函数的栈OJ链接
本题思路:定义两个栈,DataStack是用来用来存储每次每一次对栈进行的操作,另外一个TmpStack是用来辅助存储非递增的序列。本题求最小的min函数就是取辅助栈的栈顶元素即可,对于push操作一个是对于数据栈操作,还有一个是需要判断是否能够进行到非递增的辅助栈中去操作。
class MinStack {
    /** initialize your data structure here. */
    public Stack<Integer> DataStack=new Stack<>();
    public Stack<Integer> TmpStack=new Stack<>();
    public MinStack() {}
    
    public void push(int x) {
        DataStack.push(x);
        if(TmpStack.empty()||TmpStack.peek()>=x)
            TmpStack.push(x);
    }
    
    public void pop() {
        if(DataStack.pop().equals(TmpStack.peek()))
            TmpStack.pop();
    }
    
    public int top() {
        return DataStack.peek();
    }
    
    public int min() {
        return TmpStack.peek();
    }
}
/**
 * Your MinStack object will be instantiated and called as such:
 * MinStack obj = new MinStack();
 * obj.push(x);
 * obj.pop();
 * int param_3 = obj.top();
 * int param_4 = obj.min();
 */ 
 
 
 




















