定義棧的資料結構,請在該類型中實作一個能夠得到棧最小元素的min函數。
看到這個 題目,第一想法就是,我要不定義一個變量,指向目前棧中最小的值,每次入棧,就和最小值進行比較,如果比最小值小,則最小值指向該值,否則最小值依舊。
但很快遇到問題,如果在出棧時,最小值出來後,比最小值小的值呢?無法查到了啊!
于是思路出來了,用一個輔助棧,第一次将入棧的值放入,接下來每一次,和棧頂的值進行比較,如果比它小,則将該值放入,否則把棧頂的值再次放入。
此題參考劍指offer書的思路。
下面附代碼。
package com.algorithm04;
import java.util.Stack;
public class Algorithm30 {
Stack<Integer> date = new Stack<Integer>();
Stack<Integer> min_date = new Stack<Integer>();
public void push(int node) {
date.push(node);
if(min_date.size()==0||min_date.peek()>node){
min_date.push(node);
}else{
min_date.push(min_date.peek());
}
}
public void pop() {
date.pop();
min_date.pop();
}
public int top() {
return date.peek();
}
public int min() {
return min_date.peek();
}
public static void main(String[] args) {
}
}