【双指针】接雨水


求解代码

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; // 返回总积水量
    }
相关推荐
天天进步201516 小时前
Python全栈项目--协同办公平台
开发语言·python
JAVA面经实录91716 小时前
集合框架 (六)
java·开发语言
骇客野人16 小时前
Linux 查看 Java 进程常用命令
java·linux·运维
xzlAwin16 小时前
Go语言多版本管理器g工具命令
开发语言·golang
少控科技16 小时前
农场设备管理代码(2)
开发语言·c#
周GZ16 小时前
简单讲解Java中静态方法与 实例方法
java·开发语言
疯狂打码的少年17 小时前
【数据结构】树的基本概念与二叉树定义
java·数据结构·笔记·算法
盗理者17 小时前
AI Agent 技能分享|SQL 性能诊断与优化
java·sql·spring·skill
GitLqr17 小时前
Java 26 终于原生支持 HTTP/3 了:告别 Netty,直接用 QUIC
java·netty·http3
用户409666013175117 小时前
Jackson 序列化:@JsonIgnore / @JsonProperty / @JsonFormat / @JsonInclude / @JsonUnwrapped 一次讲清楚
java·后端