leetcode日记(32)接雨水

这道题我一开始的思路是从左往右找寻能装水的"水坑"(也就是找先降低后升高的地方),然后再将水坑容量全部加起来,后来想想不行,因为可能中间有隔了一个坑位的两个较高柱子,这样做的话会少算两个柱子中间的水。

后来我想到了新思路,因为之前做过类似的盛水题,是分别使用两个指针指向两端,向中间偏移,我想到这题似乎也可以这样,每次遇到高的柱子就以它为基准计算后面的盛水量,这样依次寻找出来的水坑就不会少算。

cpp 复制代码
class Solution {
public:
    int trap(vector<int>& height) {
        int sum=0;
        if(height.size()<3) return sum;
        int x=0;
        int y=height.size()-1;
        int hei=min(height[x],height[y]);
        sum+=hei*(height.size()-2);
        while(x<y-1){
            if(height[x]>height[y]){
                if(height[y-1]<=hei){y--;sum-=height[y];}
                else{
                    y--;
                    sum-=hei;
                    sum-=(y-x-1)*hei;
                    hei=min(height[x],height[y]);
                    sum+=hei*(y-x-1);
                }
            }
            else{
                if(height[x+1]<=hei){x++;sum-=height[x];}
                else{
                    x++;
                    sum-=hei;
                    sum-=(y-x-1)*hei;
                    hei=min(height[x],height[y]);
                    sum+=hei*(y-x-1);
                }
            }
        }
        return sum;
    }
};
相关推荐
16_one40 分钟前
autoDL安装Open-WebUi+Rag本地知识库问答+Function Calling
人工智能·后端·算法
散峰而望2 小时前
C++数组(三)(算法竞赛)
开发语言·c++·算法·github
q***95222 小时前
SpringMVC 请求参数接收
前端·javascript·算法
初级炼丹师(爱说实话版)2 小时前
多进程与多线程的优缺点及适用场景总结
算法
hetao17338372 小时前
2025-11-25~26 hetao1733837的刷题记录
c++·算法
历程里程碑3 小时前
各种排序法大全
c语言·数据结构·笔记·算法·排序算法
少许极端3 小时前
算法奇妙屋(十四)-简单多状态dp问题
算法·动态规划·图解算法·简单多状态dp·打家劫舍问题·买卖股票问题全解
爱学测试的雨果3 小时前
收藏!软件测试面试题
开发语言·面试·职场和发展
川Princess3 小时前
【面试经验】梅赛德斯奔驰X-Seed AI Systems - Autonomous Driving Agent Efficiency二面
面试·职场和发展
2301_823438023 小时前
解析论文《复杂海上救援环境中无人机群的双阶段协作路径规划与任务分配》
人工智能·算法·无人机