Java implementa uma pilha de funções especiais - com base nas funções básicas da pilha - implementa a operação de retornar o menor elemento da pilha

Descrição do título

Uma pilha com uma função especial é implementada.Com base nas funções básicas da pilha, a operação de retorno do menor elemento da pilha é realizada.

Exemplo 1

entrar

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

valor de retorno

[1,2]

Observações:

 

Existem três tipos de operações, op1 significa push, op2 significa pop e op3 significa getMin. Você precisa retornar uma matriz com tantas ocorrências quanto op3, representando a resposta para getMin a cada vez

 

1 <= Número total de operações <= 1000000
-1000000 <= Cada operando <= 1000000
Dados garantem que não há operações ilegais

 

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

 

Acho que você gosta

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