leetcode_Min Stack

141 篇文章 4 订阅
132 篇文章 1 订阅

描述:

Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.

  • push(x) -- Push element x onto stack.
  • pop() -- Removes the element on top of the stack.
  • top() -- Get the top element.
  • getMin() -- Retrieve the minimum element in the stack.

思路:

本题目的解法是用到了两个栈,一个用来存元素,另一个用来存最小元素,元素入栈时和minStack栈里面的栈顶元素相比,小于栈顶元素则存入,大于栈顶元素则栈顶元素(当前元素中的最小值)入栈。其中,需要注意的是元素出栈时,要随时更新当前栈中的最小元素min=minStack.top()

代码:

 Stack<Integer> st = new Stack<Integer>();
	Stack<Integer> stMin = new Stack<Integer>();
	int min = 0;

	public void push(int x) {
		if (!st.isEmpty()) {
			if (min > x) {
				st.push(x);
				stMin.push(x);
				min = x;
			} else {
				st.push(x);
				stMin.push(min);
			}

		} else {
			st.push(x);
			stMin.push(x);
			min = x;
		}
	}

	public void pop() {
		st.pop();
		stMin.pop();
		if (!stMin.isEmpty())//元素出栈时要记着更新当前栈中的最小值
			min = stMin.peek();

	}

	public int top() {
		return st.peek();
	}

	public int getMin() {
		return stMin.peek();
	}

结果:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值