Java implementa una pila de funciones especiales, sobre la base de las funciones básicas de la pila, implementa la operación de devolver el elemento más pequeño de la pila.

Descripción del Título

Se implementa una pila con una función especial Sobre la base de las funciones básicas de la pila, se realiza la operación de devolver el elemento más pequeño de la pila.

Ejemplo 1

entrar

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

valor de retorno

[1,2]

Observaciones:

 

Hay tres tipos de operaciones, op1 significa empujar, op2 significa pop y op3 significa getMin. Debe devolver una matriz con tantas ocurrencias como op3, que representa la respuesta a getMin cada vez

 

1 <= Número total de operaciones <= 1000000
-1000000 <= Cada operando <= 1000000 Los
datos garantizan que no hay operaciones ilegales

 

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();
    }
}

 

Supongo que te gusta

Origin blog.csdn.net/luzhensmart/article/details/112913529
Recomendado
Clasificación