1. 程式人生 > >劍指offer二十之包含min函數的棧

劍指offer二十之包含min函數的棧

question 保存 spl pop def ide aps pre sem

一、題目

  定義棧的數據結構,請在該類型中實現一個能夠得到棧最小元素的min函數。

二、思路

用一個棧dataStack保存數據,用另外一個棧minStack保存依次入棧最小的數。每次元素存入minStack的時候,如果該元素比minStack的棧頂元素小,則存入minStack,否則用minStack棧頂元素代替該元素存入minStack。

比如dataStack中依次入棧的元素為:5, 4, 3, 8, 10, 11, 12, 1

則minStack依次入棧的元素為: 5, 4, 3, 3, 3, 3, 3, 1

三、代碼

技術分享
import
java.util.Stack; /* 用一個棧dataStack保存數據,用另外一個棧minStack保存依次入棧最小的數。每次元素存入minStack的時候,如果該元素比minStack的棧頂元素小,則存入minStack,否則用minStack棧頂元素代替該元素存入minStack。 比如dataStack中依次入棧的元素為:5,4,3,8,10,11,12,1 則minStack依次入棧的元素為:5,4,3,3,3,3,3,1 */ public class Solution { Stack<Integer> dataStack = new Stack<Integer>(); //
保存元素 Stack<Integer> minStack = new Stack<Integer>(); //保存最小元素 public void push(int value) { dataStack.push(value); //元素入dataStack if (minStack.isEmpty() || value < minStack.peek()) { //如果minStack為空,或者當前存入的元素小於minStack的棧頂元素,則把該元素存入minStack minStack.push(value); }
else { minStack.push(minStack.peek());//如果minStack不為空且當前存入的元素大於或者等於minStack的棧頂元素,則把minStack棧頂元素存入minStack } } public void pop() { dataStack.pop(); minStack.pop(); } public int top() { return dataStack.peek(); } public int min() { return minStack.peek(); } }
View Code

--------------------------------------------------------------------------------

參考鏈接:https://www.nowcoder.com/questionTerminal/4c776177d2c04c2494f2555c9fcc1e49

劍指offer二十之包含min函數的棧