package jianzhiOffer; import java.util.Stack; /** * 定義棧的數據結構,請在該類型中實現一個可以得 * 到棧最小元素的min函數。 * @author user * 思路:建立兩個棧,一個用於存儲數據,一個用於 * 存儲最小數據,還要注意兩個棧應該保持同步的入棧 * 和出棧,以保證minStack頂部始終是最小的數據 */ public class ch20 { Stack<Integer> stack = new Stack<>(); Stack<Integer> minStack = new Stack<>(); Integer tmp = null; public void push(int node) { stack.push(node); //判斷若是爲空則直接壓入 if(minStack.isEmpty()) { minStack.push(node); } else { //不然,進行比較 tmp = stack.peek(); if(tmp <= minStack.peek()) { minStack.push(tmp); } else { //當發現當前壓入數據不是最小的時候,minStack還應繼續壓入之前的最小數 //以此保證minStack頂部始終是最小的數據 minStack.push(minStack.peek()); } } } public void pop() { stack.pop(); minStack.pop(); } public int top() { return stack.peek(); } public int min() { return minStack.peek(); } }