1. 程式人生 > >《劍指offer》系列 包含min函式的棧(Java)

《劍指offer》系列 包含min函式的棧(Java)

連結

牛客:包含min函式的棧

題目描述

定義棧的資料結構,請在該型別中實現一個能夠得到棧中所含最小元素的min函式(時間複雜度應為O(1))。

思路

我們需要實現四個函式push(), pop(), top(), min()
這四個函式是相輔相成的,我們藉助兩個棧來實現這樣的功能。
其中一個就是正常的棧onstack,還有一個是存放最小值的棧minstack。
在每個函式中,正常的棧就正常保持原來那樣操作,同時最小值棧也要進行相應的處理,min()函式返回的就是最小值棧的棧頂,所以每次遇到比棧頂更小的值都要壓入

程式碼

import java.util.Stack;

public class Solution {

    private Stack<Integer> onstack = new Stack<Integer>();
    private Stack<Integer> minstack = new Stack<Integer>();
    
    private int size;
    private int min = Integer.MAX_VALUE;
    public void push(int node) {
        if(minstack.isEmpty()){
        	minstack.push(node);
		} else if(node <= min()){			//這裡一定要有等於號!!!
        	minstack.push(node);
        }
        onstack.push(node);
    }
    
    public void pop() {
    	int value = onstack.pop();
        //當普通棧的棧頂值和最小值一樣  最小值棧彈出
    	if(value == min()){
    		minstack.pop();
    	}
    }
    
    public int top() {
        return onstack.peek();
    }
    
    public int min() {
        return minstack.peek();
    }
}