力扣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;
    }
};
相关推荐
学嵌入式的小杨同学12 小时前
循环队列(顺序存储)完整解析与实现(数据结构专栏版)
c语言·开发语言·数据结构·c++·算法
程序员-King.12 小时前
day128—二分查找—搜索二维矩阵(LeetCode-74)
leetcode·矩阵·二分查找
shangjian00712 小时前
AI大模型-机器学习-算法-线性回归-优化方法
人工智能·算法·机器学习
shangjian00713 小时前
AI大模型-机器学习-算法-逻辑回归
人工智能·算法·机器学习
王锋(oxwangfeng)13 小时前
车道线拟合算法--自动驾驶
人工智能·算法·自动驾驶
computersciencer13 小时前
一文快速理解线性回归的过程
算法·机器学习·回归·线性回归
VT.馒头13 小时前
【力扣】2627. 函数防抖
前端·javascript·算法·leetcode
想逃离铁厂的老铁13 小时前
Day41 >> 121、买卖股票的最佳时机 + 122.买卖股票的最佳时机II + 123.买卖股票的最佳时机III
算法·leetcode
夏鹏今天学习了吗13 小时前
【LeetCode热题100(79/100)】打家劫舍
算法·leetcode·职场和发展
iAkuya13 小时前
(leetcode)力扣100 41二叉树的层序遍历(bfs)
windows·leetcode·宽度优先