day-59 代码随想录算法训练营(19)单调栈 part 02

503.下一个更大的元素||

思路一:单调栈+取模
  • 涉及循环数组,直接把遍历的下标翻倍,然后查找和赋值时下标进行取模
class Solution {
public:
    vector nextGreaterElements(vector& nums) {
        stackst;
        int n=nums.size();
        vectorres(n,-1);
        for(int i=0;inums[st.top()]){//查找时进行取模
                cout<

42.接雨水

思路一:单调栈 + 分块计算
class Solution {
public:
    int trap(vector& height) {
        //思路一:两个单调栈(一前一后)
        stackst;
        int n=height.size();
        int res=0;
        st.push(0);
        for(int i=1;i height[st.top()]){
                int mid=st.top();//底部柱子
                st.pop();
                if(!st.empty()){//左边还有柱子时
                    int h=min(height[st.top()],height[i])-height[mid];//雨水的高度
                    int w=i-st.top()-1;//雨水的宽度
                    res+=h*w;//加上雨水的面积
                }
            }
            st.push(i);
        }
        return res;
    }
};

你可能感兴趣的:(#,代码随想录算法训练营(19),算法,数据结构)