LeetCode:每日温度【739】之 JAVA 堆栈类(Stack)的使用

  堆栈是一种 “后进先出” (LIFO) 的数据结构, 只能在一端进行插入(称为 “压栈” ) 或删除 (称为“出栈”)数据的操作,Stack堆栈添加移除元素的原则是后进先出

  Stack类的主要方法是:push(), peek(), pop(), empty(), search()。

  • push() - 将元素推送到堆栈顶部(在栈顶添加元素)
  • peek() - 返回栈顶的元素,但是不删除栈顶元素
  • pop() - 和peek()一样返回栈顶元素,但是要将栈顶元素移除掉 即移除并返回堆栈的顶部元素
    • 如果我们在调用堆栈为空时调用pop(),则抛出’EmptyStackException’异常
  • empty() - 检查栈是否为空
    • 如果堆栈顶部没有任何内容,则返回true。否则,返回false。
  • earch() - 返回元素在堆栈中的位置

基础篇

Stack stack = new Stack();

String s1 = "element 1";
String s2 = "element 2";

stack.push(s1);
stack.push(s2);

  现在栈中有两个元素,栈顶应该是element 2,我们可以通过peek方法看栈顶的元素:

System.out.println(stack.peek());

  输出:element 2

  要看element 1的位置需要使用search方法:

int pos = stack.search("element 1");
System.out.println(pos);

  上面代码将输出:2

  要移除栈顶的元素应该用pop()方法:

System.out.println(stack.pop());
System.out.println(stack.pop());

  在上一步中栈中的两个元素都被pop了,现在我们看下empty()方法是否返回true

System.out.println(stack.empty());

  输出:true

进阶篇

  LeetCode:每日温度【739】

  题目描述:根据每日气温列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数。如果之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。

class Solution{
	public int[] dailyTemperatures(int[] T) {
		// 单调栈 里面的数 非递增排序 
		Stack<Integer> stack = new Stack<>();
		int[] res = new int[T.length];
		for(int i=res.length-1; i>=0; i--) {
			 // 当前元素比栈顶元素大 出栈 重新调整栈直至满足要求
			while(!stack.empty() && T[i]>=T[stack.peek()]) {
				stack.pop();
			}
			// 栈为空 即后面没有比当前天温度高的
            // 不为空 栈顶元素对应的下标减去当前下标即为经过几天后温度比当前天温度高
			res[i] = stack.empty()?0:stack.peek()-i;
			// 当前元素进栈
			stack.push(i);
		}
		return res;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值