力扣42. 接雨水

双指针法

  • 思路:
    • 将数组前后设置为 left、right 指针,相互靠近;
    • 在逼近的过程中记录两端最大的值 leftMax、rightMax,作为容器的左右边界;
    • 更新指针规则:
      • 如果数组左边的值比右边的小,则更新 left 指针,同时累计当前组成的容器的容量;(该容器在更新 leftMax 时闭合)
      • 反之,则更新 right 指针,同理累计其组成容器的容量;
cpp 复制代码
class Solution {
public:
    int trap(vector<int>& height) {
        int capacity = 0;
        int left = 0;
        int right = height.size() - 1;
        int leftMax = 0;
        int rightMax = 0;

        while (left < right) {
            leftMax = std::max(leftMax, height[left]);
            rightMax = std::max(rightMax, height[right]);
            if (height[left] < height[right]) {
                capacity += (leftMax - height[left]);
                ++left;
            } else {
                capacity += (rightMax - height[right]);
                --right;
            }
        }

        return capacity;
    }
};
相关推荐
一条大祥脚9 分钟前
26.1.9 轮廓线dp 状压最短路 构造
数据结构·c++·算法
鲨莎分不晴16 分钟前
反向传播的数学本质:链式法则与动态规划的完美共舞
算法·动态规划
sonadorje26 分钟前
逻辑回归中的条件概率
算法·机器学习·逻辑回归
cici1587431 分钟前
基于Pan-Tompkins算法的ECG信号HRV提取方案
算法
McGrady-1751 小时前
拓扑导航 vs 几何导航的具体实现位置
算法
副露のmagic1 小时前
更弱智的算法学习 day24
python·学习·算法
颜酱1 小时前
前端必备动态规划的10道经典题目
前端·后端·算法
wen__xvn1 小时前
代码随想录算法训练营DAY10第五章 栈与队列part01
java·前端·算法
cpp_25012 小时前
P2708 硬币翻转
数据结构·c++·算法·题解·洛谷
程序猿阿伟3 小时前
《Python复杂结构静态分析秘籍:递归类型注解的深度实践指南》
java·数据结构·算法