单调栈问题:
单调栈用于寻找数组中离任一元素相近最大的值/最小的值。
在本体上逻辑如下:
循环 遍历该数组
循环 如果 栈不为空 且 栈顶元素 小于 当前元素
栈顶元素出栈
标记入结果数组:当前元素为最近的最大值
//注意,这里会一直清空元素
退出循环
将当前元素存入栈中
退出循环
代码如下:
int[] res = new int[temperatures.length];
Stack<Integer> stack = new Stack<Integer>();
for(int i=0;i<temperatures.length;i++){
//单调栈
//每次送入一个值,因为要找右边最大的那个数,所以栈要保证越靠近底部越大
//每次将新数据送入栈中,与栈顶元素对比,如果该数据更小,那么放在顶部
//如果该数据更大,那么栈内元素出栈
//所有出栈元素右边最近且最大的那个值就是进栈数据的值
//如果相等可以继续进栈,无所谓,反正都在一起,不用考虑更小的那个
while(!stack.empty() && temperatures[stack.peek()] < temperatures[i]){
res[stack.peek()] = i - stack.peek();
stack.pop();
}
stack.push(i);
}
return res;