leetcode 接雨水问题 双指针解法和单调栈解法

int trap(vector& height) {
// 单调栈解法
        int n = height.size();
        int ans = 0;
        stack st;
        for(int i = 0;i height[st.top()])
            {
                int a = st.top();
                st.pop();
                while(!st.empty() and height[a] == height[st.top()])
                {
                    st.pop();
                }
                if(!st.empty()){
                    int h = min( height[i]-height[a],height[st.top()]-height[a]);
                    int w = i-st.top()-1;
                    ans += h*w;
                }

            }
            st.push(i);
        }
        return ans;
//双指针解法:
        // int n = height.size();
        // int res = 0;
        // int l = 0,r = n-1;
        // int tmp = 0;
        // while(l

 

你可能感兴趣的:(刷题)