leetcode:1509、248、84、85、42
一、单调栈概念
1、单调栈通过维持栈内值的单调递增(递减)性,在O(n)的时间内处理需要大小比较的问题。
作用:可以以O(1)的时间复杂度得知某个位置左右两侧比它大(或小)的数的位置,当你需要高效率获取某个位置左右两侧比它大(或小)的数的位置的时候用到单调栈。
2、单调递增(递减)栈
单调递增栈:找到左起第一个比当前数字小的元素
for (int i = 0; i < T.size(); ++i) {
while(! st.empty() && T[st.top()] > T[i]) {
st.pop();
}
st.push(i); //单调栈内存放的是原数组元素的index
}
单调递减栈:找到左起第一个比当前数字大的元素
for (int i = T.size() - 1 ; i >= 0; --i) {
while(! st.empty() && T[st.top()] <= T[i]) {
st.pop();
}
st.push(i);
}