【双指针】接雨水


求解代码

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; // 返回总积水量
    }
相关推荐
学长毕设6 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
C^h7 小时前
c++ string
开发语言·c++
raindayinrain7 小时前
c++高性能--原子操作,无锁编程,操作顺序
开发语言·c++·性能优化
学逆向的7 小时前
C++ 合并命名空间
开发语言·c++·网络安全
Zhao-Jichao7 小时前
VS2026 打包 C++ 程序生成 EXE,借助 Installer Project 扩展工具
开发语言·c++
zzu123zsw8 小时前
从臃肿的模板调用到声明式契约:深入 UniHttp 动态代理与多渠道生命周期扩展
java·spring boot·microsoft·unihttp
学逆向的8 小时前
C 局部静态变量
c语言·开发语言·网络安全
大都督会赢的8 小时前
C++第一节课
开发语言·c++
“AI国潮设计-小江”8 小时前
【AIGC实战】Python+Stable Diffusion打造“英歌舞财神”IP,解锁“马到成功”等爆款情绪营销文案设计
开发语言·人工智能·python·prompt·aigc
源码集结号8 小时前
云诊所门诊系统源码,基于SpringBoot+Vue.js架构,支持多租户设计与Docker容器化部署
java·spring boot·源码·医院信息系统·门诊系统·诊所系统