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;
    }
};
相关推荐
springfe01012 分钟前
构建大顶堆
前端·算法
天真小巫29 分钟前
2025.6.8
职场和发展
凌辰揽月40 分钟前
Web后端基础(基础知识)
java·开发语言·前端·数据库·学习·算法
lifallen1 小时前
深入浅出 Arrays.sort(DualPivotQuicksort):如何结合快排、归并、堆排序和插入排序
java·开发语言·数据结构·算法·排序算法
jingfeng5141 小时前
数据结构排序
数据结构·算法·排序算法
能工智人小辰1 小时前
Codeforces Round 509 (Div. 2) C. Coffee Break
c语言·c++·算法
kingmax542120081 小时前
CCF GESP202503 Grade4-B4263 [GESP202503 四级] 荒地开垦
数据结构·算法
岁忧1 小时前
LeetCode 高频 SQL 50 题(基础版)之 【高级字符串函数 / 正则表达式 / 子句】· 上
sql·算法·leetcode
eachin_z2 小时前
力扣刷题(第四十九天)
算法·leetcode·职场和发展
闻缺陷则喜何志丹2 小时前
【强连通分量 缩点 拓扑排序】P3387 【模板】缩点|普及+
c++·算法·拓扑排序·洛谷·强连通分量·缩点