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; } };
-
-
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!