【Java】 劍指offer(30) 包含min函數的棧

本文參考自《劍指offer》一書,代碼採用Java語言。html

更多:《劍指Offer》Java實現合集  java

題目 

  定義棧的數據結構,請在該類型中實現一個可以獲得棧的最小元素的min函數。在該棧中,調用min、push及pop的時間複雜度都是O(1)。node

思路

  最初想法是定義一個成員變量min來存放最小元素,可是當最小元素彈出後,min就須要相應改變,因此必須把每次的最小值都存儲下來。考慮採用一個輔助棧來存放最小值:數據結構

    棧  3,4,2,5,1函數

     輔助棧 3, 3,2,2,1
  (壓入時,把每次的最小元素(以前最小元素與新入棧元素的較小值)保存起來放到輔助棧中)

測試算例 post

  1.新壓入數字更大測試

  2.新壓入數字最小url

  3.彈出數字最小spa

  4.彈出數字不是最小htm

Java代碼

//題目:定義棧的數據結構,請在該類型中實現一個可以獲得棧的最小元素的min
//函數。在該棧中,調用min、push及pop的時間複雜度都是O(1)。

public class StackWithMin {
	
	Stack<Integer> stack_data=new Stack<Integer>();
	Stack<Integer> stack_min=new Stack<Integer>();

    public void push(int node) {
        stack_data.push(node);
        if(stack_min.empty() || stack_min.peek()>node) {
        	stack_min.push(node);
        }else {
        	stack_min.push(stack_min.peek());
        }        
    }
    
    public void pop() {
    	if(!stack_data.empty()) {
            stack_data.pop();
            stack_min.pop();
    	}
    }    
 
    public int min() {
        return stack_min.peek();
    }
}

  

收穫

  要學會這種狀況下輔助棧的用法。

  

更多:《劍指Offer》Java實現合集 

相關文章
相關標籤/搜索