【双指针】接雨水


求解代码

java 复制代码
public long maxWater(int[] arr) {
        // 数组长度<3,无法形成凹坑接水,直接返回0
        if (arr == null || arr.length < 3) {
            return 0;
        }

        int left = 0; // 左指针
        int right = arr.length - 1; // 右指针
        long ans = 0; // 总积水量

        int leftMax = arr[left]; // 左指针左侧(含当前)的最大柱子高度,初始为左指针初始值
        int rightMax = arr[right]; // 右指针右侧(含当前)的最大柱子高度,初始为右指针初始值

        while (left < right) {
            // 更新左右最大高度→取最大值,记录遍历过的最高柱子
            leftMax = Math.max(leftMax, arr[left]);
            rightMax = Math.max(rightMax, arr[right]);

            // 当前位置的积水量由较小的最大高度决定,移动该侧指针可逐步统计积水量
            if (leftMax < rightMax) {
                ans += leftMax - arr[left];
                left++; 
            } else {
                ans += rightMax - arr[right];
                right--; 
            }
        }
        return ans; // 返回总积水量
    }
相关推荐
DukeMr.Lee几秒前
有声书实现
java·开发语言
今夕资源网几秒前
Visual C++运行库合集 V104.0 一个github免费开源的项目VisualCppRedist AIO
开发语言·c++·dll修复工具·dll修复·运行库·修复软件
syagain_zsx1 分钟前
剖析“继承”,清晰易懂
开发语言·c++
SamDeepThinking2 分钟前
秒杀系统的幂等,只做一层Redis判重远远不够
java·后端·架构
qq_283720054 分钟前
Qt5.12.8 QML Canvas ctx.setLineDash 失效终极解决方案
开发语言·qt
Season4505 分钟前
C++中论在类中成员变量定义顺序的重要性
开发语言·c++
csdn2015_5 分钟前
lambdaQuery 加 or
java·linux·服务器
拳里剑气7 分钟前
C++算法:前缀和
开发语言·c++·算法·前缀和
天涯海风11 分钟前
写一个录音并保存到手机的工具 安卓工具类
android·java·智能手机
sjsjsbbsbsn15 分钟前
RAG 基础学习总结
java·数据库·学习