42. 接雨水

✔做题思路or感想:

  • 先说感想:二刷的我又对这道题写了一个小时,可恶

  • 这道题用单调栈比较好理解

    • 用单调栈来储存下标!用下标来计算宽度,用height[i]来算高度

    • 要保持单调栈递减的状态,符合题意

      • height[i]=height[st.top()],则要替换掉栈顶的元素,因为这里是需要用最右的柱子下标来计算宽度的

      • height[i] < height[st.top()],则入栈

      • height[i] > height[st.top()],则说明形成凹槽,可以计算

        class Solution {
        public:
            int trap(vector<int>& height) {
                stack<int>st;
                int sum = 0;
                st.push(0);
                for (int i = 1; i < height.size(); i++) {
                    if (height[i] == height[st.top()]) {	//情况一
                        st.pop();
                        st.push(i);
                    } else if (height[i] < height[st.top()]) {	//情况二
                        st.push(i);
                    } else {	//情况三
                        //这里是while!而且是height[i] > height[st.top()]!!!
                        while (!st.empty() && height[i] > height[st.top()]) {
                            int mid = st.top();
                            st.pop();
                            if (!st.empty()) {	//这里最左边不能是空的,故!st.empty()
                                //计算h,w,进而计算雨水面积
                                int h = min(height[i], height[st.top()]) - height[mid];
                                int w = i - st.top() - 1;
                                sum += h * w;
                            }
                        }
                        st.push(i);//把雨水收集完了以后,别忘了入栈!!!
                    }
                } 
                return sum;
            }
        };
        
posted @   北原春希  阅读(57)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示