Java实现一个特殊功能的栈-在实现栈的基本功能的基础上-再实现返回栈中最小元素的操作

题目描述

实现一个特殊功能的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。

示例1

输入

[[1,3],[1,2],[1,1],[3],[2],[3]]

返回值

[1,2]

备注:

 

有三种操作种类,op1表示push,op2表示pop,op3表示getMin。你需要返回和op3出现次数一样多的数组,表示每次getMin的答案

1<=操作总数<=1000000
-1000000<=每个操作数<=1000000
数据保证没有不合法的操作

import java.util.*;


public class Solution {
    
    Stack<Integer> stack1 = new Stack();
    Stack<Integer> minStack = new Stack();
    
    /**
     * [[1,3],[1,2],[1,1],[3],[2],[3]]
     * 有三种操作种类,op1表示push,op2表示pop,op3表示getMin。你需要返回和op3出现次数一样多的数组,表示每次getMin的答案
     * 麻蛋 [1]代表push [2]代表pop [3]表示getMin操作 [1,3]中1代表先push 2代表要push的值
     * [1,2]代表push然后pop
     */
    /**
     * 思路:建立两个栈,一个data栈压入数据(和正常的压栈一样),
     * 另一个min栈压入最小值。如果压入的数据比当前最小值小则压入min栈,
     * 大于当前最小值则重复压入当前min栈栈顶元素。 min栈和data保持同步的入栈出栈操作,
     * 这样始终保持min栈栈顶元素为最小值。
     */
    public int[] getMinStack (int[][] op) {
        
        List<Integer> list = new ArrayList();
        
        for(int[] opt : op){
            //代表PUSH
            if(opt[0] == 1){
                push(opt[1]);
            }else if(opt[0] == 2){//代表pop
                pop();
            }else{//代表getMin
                list.add(getMin());
            }
        }
        
        int[] result = new int[list.size()];
        for(int i=0;i<list.size();i++){
            result[i] = list.get(i);
        }
        
        return result;
        
    }
    
    public void push(int val){
        if(minStack.isEmpty()){
            minStack.push(val);
        }else if(val <= getMin()){
            minStack.push(val);
        }
        
        stack1.push(val);
    }
    
    public void pop(){
        if(stack1.isEmpty() || minStack.isEmpty()){
            return;
        }        
        
        //peek()不弹出 只返回栈顶元素 注意这里要用equals 因为是Integer 如果用== 将会不相等
        if(stack1.peek().equals(minStack.peek()) ){
            minStack.pop();
        }
        
        stack1.pop();
        
    }
    
    public int getMin(){
       return minStack.peek();
    }
}

猜你喜欢

转载自blog.csdn.net/luzhensmart/article/details/112913529
今日推荐