单调栈 01

136 阅读1分钟

LeetCode 739

原题链接

代码如下:

import java.util.Arrays;
import java.util.Deque;
import java.util.LinkedList;

/**
 * 单调栈
 * 
 * 维护一个单调栈,里面存数组的下标
 * 指针从头依次遍历数组,如果是栈非空且栈顶元素小于当前气温,即遇到了大于自己气温的那天
 * 先弹栈,此值为之前入栈的天数下标,将当前天数下标减之前的下标,就是待求值
 * 这个过程循环下去,看当天气温  是否是 相对于 栈内元素对应的那天   气温  高  的一天
 * 是,则继续更新之前日子的ans值
 * 最后将当前天气的下标去栈 
 * 
 * Code by java
 */

class Solution {
	public int[] dailyTemperatures(int[] T) {
		int len = T.length;
		int[] ans = new int[len];
		Deque<Integer> stack = new LinkedList<Integer>();

		for (int i = 0; i < len; i++) { // 遍历数组
			int curTemper = T[i];
			while (!stack.isEmpty() && curTemper > T[stack.peek()]) { // 如果空栈,或当前的气温大于栈顶元素,则更新结果
				int preIndex = stack.pop();
				ans[preIndex] = i - preIndex;
			}
			stack.push(i);
		}
		return ans;
	}

	public static void main(String[] args) {
		Solution a = new Solution();
		int[] k = { 73, 74, 75, 71, 69, 72, 76, 73 };
		System.out.println(Arrays.toString(a.dailyTemperatures(k)));
	}
}