【双指针】接雨水


求解代码

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; // 返回总积水量
    }
相关推荐
大尚来也8 分钟前
红黑树与AVL树:平衡二叉搜索树的博弈与抉择
开发语言
鱼鳞_18 分钟前
Java学习笔记_Day22
java·笔记·学习
今天又是充满希望的一天28 分钟前
C++分布式系统知识
开发语言·c++
zth41302138 分钟前
SegmentSplay‘s Super STL(v2.2)
开发语言·c++·算法
__土块__39 分钟前
一次电商秒杀系统架构评审:从本地锁到分布式锁的演进与取舍
java·redis·高并发·分布式锁·redisson·架构设计·秒杀系统
她说..43 分钟前
Java 注解核心面试题
java·spring boot·spring·spring cloud·自定义注解
用户83071968408243 分钟前
Spring Boot @Qualifier深度解密:从“按名查找”到“分组批量注入”,一文掌握它的全部“隐藏技能”。
java·spring boot
亦暖筑序1 小时前
Message 四分天下:Spring AI 如何统一消息格式
java·人工智能
镜花水月linyi1 小时前
JDK 8 → 17 → 21 → 25:一次性讲清四代版本的关键跃迁
java·后端
沐知全栈开发1 小时前
《jEasyUI 格式化列》
开发语言