天天看點

劍指offer30題

定義棧的資料結構,請在該類型中實作一個能夠得到棧最小元素的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) {
		
	}
}