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;
    }
};
相关推荐
AI科技星13 小时前
基于**v=c(空间光速螺旋运动)唯一第一性原理**重新完整求导证明
人工智能·线性代数·算法·机器学习·架构·概率论·学习方法
风筝在晴天搁浅13 小时前
美团 LeetCode 692.前K个高频单词
算法·leetcode·职场和发展
地平线开发者13 小时前
量化训练时 fusebn/withbn 简介
算法·自动驾驶
不做无法实现的梦~14 小时前
MAVLink 协议教程
linux·stm32·嵌入式硬件·算法
墨白曦煜14 小时前
算法实战笔记:剥开回溯算法的外衣——从通用模板到高阶去重(八)
笔记·算法
z2005093014 小时前
今日算法(回溯子集)(模版题)
数据结构·算法·leetcode
吴佳浩14 小时前
Vibe Coding 时代,研发经理为何越来越值钱?
算法·架构
IronMurphy14 小时前
【算法五十四】72. 编辑距离
算法
QiLinkOS14 小时前
【用呼吸重构创造价值关系——QiLink生态】
c语言·数据结构·c++·人工智能·单片机·嵌入式硬件·算法
妄想出头的工业炼药师15 小时前
暗光长走廊特殊场景视觉解决方案
算法·开源