【Leetcode 42】 接雨水

基础思路:

(1)需要将问题最小化,首先计算第i个位置最多容纳多少雨水(细长的一条水柱),然后求和就是总的雨水量;

(2)第i个位置容纳雨水量 = min(左侧最高, 右侧最高) - height[i]

进一步的:

问题转化成了,如何用最短时间计算所有位置左侧最高点和右侧最高点,这是一个简单的动态规划问题,时间复杂度O(n)

java 复制代码
public static int trap(int[] height) {
        int n = height.length;
        int result = 0;
        int[] lh = new int[n];
        int[] rh = new int[n];

        //计算左侧最高点
        int maxHeight = 0;
        for (int i = 1; i < n; i++) {
            if (height[i-1] > maxHeight) {
                maxHeight = height[i-1];
            }
            lh[i] = maxHeight;
        }

        //计算右侧最高点
        maxHeight = 0;
        for (int i = n-2; i >= 0; i--) {
            if (height[i+1] > maxHeight) {
                maxHeight = height[i+1];
            }
            rh[i] = maxHeight;
        }

        //计算每个位置的水柱,求和
        for (int i = 0; i < n; i++) {
            int wall = lh[i] > rh[i] ? rh[i] :lh[i];
            if (wall <= height[i]) {
                continue;
            }
            result += (wall - height[i]);
        }

        return result;
    }
相关推荐
Aczone2818 分钟前
数据结构(三)双向链表
java·数据结构·链表
菜菜的后端私房菜18 分钟前
Dubbo2到Dubbo3服务发现机制的优化
java·后端·dubbo
33255_40857_2805927 分钟前
RocketMQ实战指南:Java开发者的分布式消息中间件全解析
java·rocketmq
Seven9737 分钟前
剑指offer-19、顺时针打印矩阵
java
SimonKing38 分钟前
PostMan不香了,IDEA因为Apipost插件这一功能轻松取代
java·后端·程序员
CODE_RabbitV41 分钟前
如何让 RAG 检索更高效?——大模型召回策略全解
人工智能·算法·机器学习
阑梦清川1 小时前
leetcode上面的一道关于使用递归进行二叉树的构建问题
算法
用户5470058355221 小时前
Claude code 课程:工具使用-2.你的第一个简单工具
算法
无规则ai1 小时前
数字图像处理(冈萨雷斯)第三版:第四章——频率域滤波(学前了解知识)——主要内容和重点
人工智能·算法·机器学习·计算机视觉
_杨瀚博1 小时前
Maven 构建知识库
java·后端