N20_包含min函数的栈

题目描述

定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
 
思路:
1 可以考虑每次比较进栈元素,使用固定单元将最小的元素存起来  这样不能获得次小元素
2 空间换时间  创建一个辅助栈将每次栈中的最小元素压入辅助栈中
package new_offer;
/**
 * 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数
 * (时间复杂度应为O(1))。
 * 思路:借助一个辅助栈,将每次栈中的最小元素压入辅助栈中。
 *     smin每次进栈元素为当前栈中的最小元素。
 */
import java.util.Stack;
public class N20_Stack_Min {
	public class Solution {
 
		//定义一个数据栈及一个辅助栈
		Stack<Integer> sdata=new Stack();	
		Stack<Integer> smin=new Stack();
	    public void push(int node) {
	        sdata.push(node);
	        if(smin.size()==0||smin.peek()>node) {
	        	smin.push(node);
	        }else {
	        	smin.push(smin.peek());
	        }
	    }
	    
	    public void pop() {
	        if(sdata.size()>0&&smin.size()>0) {
	        	sdata.pop();
	        	smin.pop();
	        }
	    }
	    
	    public int top() {
	    	int n=sdata.peek();
			return n;
	        
	    }
	    
	    public int min() {
			return smin.peek();
	        
	    }
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub

	}

}

  

原文地址:https://www.cnblogs.com/kexiblog/p/11121214.html