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助手3 小时前
DTW模版匹配:弹性对齐的时间序列相似度度量算法
人工智能·算法·机器学习·数据挖掘·模版匹配·dtw模版匹配
YuTaoShao4 小时前
【LeetCode 热题 100】48. 旋转图像——转置+水平翻转
java·算法·leetcode·职场和发展
生态遥感监测笔记5 小时前
GEE利用已有土地利用数据选取样本点并进行分类
人工智能·算法·机器学习·分类·数据挖掘
Tony沈哲5 小时前
macOS 上为 Compose Desktop 构建跨架构图像处理 dylib:OpenCV + libraw + libheif 实践指南
opencv·算法
刘海东刘海东6 小时前
结构型智能科技的关键可行性——信息型智能向结构型智能的转变(修改提纲)
人工智能·算法·机器学习
pumpkin845146 小时前
Rust 调用 C 函数的 FFI
c语言·算法·rust
挺菜的6 小时前
【算法刷题记录(简单题)003】统计大写字母个数(java代码实现)
java·数据结构·算法
mit6.8246 小时前
7.6 优先队列| dijkstra | hash | rust
算法
2401_858286117 小时前
125.【C语言】数据结构之归并排序递归解法
c语言·开发语言·数据结构·算法·排序算法·归并排序