单调栈定义:
栈内元素单调按照递增(递减)顺序排列的栈。
单调栈又分为单调递减栈与单调递增栈
单调递减栈:
①在一个数组中针对每一个元素从它右边寻找第一个比它大的元素
②在一个数组中针对每一个元素从它左边寻找第一个比它大的元素(从后往前遍历)
Stack<integer> st = new Stack<integer>();
//数组元素放入栈中
for(int num : nums){
//当数组不为空时,若num值大于栈顶值的时候,弹出栈顶元素,一直到num值不大于当前栈顶值
if(!st.empty() && st.peek() < num){
st.pop();
}
else{
st.push(num);
}
}
如LeetCode1019. 链表中的下一个更大节点
找出输入数组中,每个元素右边第一个比它大的元素,若没有则为0。
输入:[2,7,4,3,5]
输出:[7,0,5,5,0]
2入栈 结果:[2]
7比2大,2弹出,7入栈 结果:[7] 第一个比2大的元素为7
4比7小,4入栈 结果: [7,4]
3比4小,3入栈 结果: [7,4,3]
5比3大,3弹出;5比4大,4弹出,5比7小,5入栈 结果[7,5] 第一个比3,4大的元素为5
没有比5,7大的元素
单调递增栈:
①在一个数组中针对每一个元素从它右边寻找第一个比它小的元素
②在一个数组中针对每一个元素从它左边寻找第一个比它小的元素(从后往前遍历)