剑指 offer之包含min函数的栈_java

题目:包含min函数的栈
题目描述
定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。
解题思路:
用两个实现包含min函数的栈sk2(min) sk1正常。如果sk2为空,直接压入;不为空进行比较,如果此时的节点比sk2最上层的节点数值大的话,就压入sk2的最上层节点,小的话,就压入此时的节点。
ps:如果每次都把最小元素压入辅助栈中(sk2),那么就保证辅助栈的站定一直都是最小元素,当最小元素从数据栈内被弹出之后,同时弹出 辅助栈的栈顶元素,此时辅助栈的新栈顶元素就是下一个最小值。
实现代码:

import java.util.Stack;
import java.util.*;
public class Solution {
	    Stack<Integer> sk1=new Stack<>();
	    Stack<Integer> sk2=new Stack<>();
	    public void push(int node) {
	    	sk1.push(node);
	    	//如果此时辅助栈为空,直接压入新的元素
	        if(sk2.isEmpty()) {
	        	sk2.push(node);
	        }else {
	        	//辅助栈不为空,将栈顶元素和新的元素进行对比
	        	//新的元素比辅助栈的栈顶元素小,将新的元素压入辅助栈
	        	if(node<sk2.peek()) {
	        		sk2.add(node);
	        	}else {
	        		//新的元素比辅助栈的栈顶元素大,将栈顶元素压入辅助栈
	        		sk2.push(sk2.peek());
	        	}
	        }
	    }
	    public void pop() {
	        sk1.pop();
	        sk2.pop();
	    }
	    public int top() {
			return sk1.peek();
	    }
	    //辅助栈的栈顶元素是最小值
	    public int min() {
			return sk2.peek();
	    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值