【双指针】接雨水


求解代码

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; // 返回总积水量
    }
相关推荐
乐观勇敢坚强的老彭1 分钟前
信奥C++一维数组笔记
开发语言·c++·笔记
码上有光3 分钟前
异常和智能指针
java·大数据·c++·servlet·异常·智能指针
这就是佬们吗9 分钟前
Python入门⑤-异常处理、文件操作与实战项目
开发语言·数据库·python·算法·pycharm
asdzx6720 分钟前
Python PDF 拆分实战指南:单页拆分与按需页码范围拆分
开发语言·python·pdf
孬甭_31 分钟前
C++ vector
开发语言·c++
学计算机的计算基1 小时前
操作系统内存管理全解:虚拟内存、页表、COW、malloc、OOM一篇搞定
java·笔记·算法
tachibana21 小时前
hot100 前 K 个高频元素(347)
java·数据结构·算法·leetcode
AOwhisky1 小时前
Python 学习笔记(第五期)——组合数据类型:列表、元组、集合与字典精讲——核心知识点自测与详解
开发语言·笔记·python·学习·云计算
万亿少女的梦1681 小时前
基于Spring Boot、Java与MySQL的网络订餐系统设计与实现
java·spring boot·mysql·系统设计·网络订餐
咩咩啃树皮10 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构