【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;
    }
相关推荐
噢,我明白了11 分钟前
表单的完整 CRUD 练习【极简个人记账本】(含前端后端链接mySQL)
java·前端·数据库·mysql
AI机器学习算法15 分钟前
机器学习基础知识
数据结构·人工智能·python·深度学习·算法·机器学习·ai学习路线
通往曙光的路上18 分钟前
mysql1
java
Tigshop开源商城5 小时前
『物流设置+SEO优化』Tigshop开源商城系统 JAVA v5.8.26 版本更新!
java·开源商城系统·tigshop
X journey6 小时前
机器学习进阶(13):支持向量机SVM
算法·机器学习·支持向量机
Tigshop开源商城7 小时前
『订单税率+收货地址校验国家字段』功能上新|跨境运营更高效,Tigshop开源商城系统 JAVA v5.8.23 版本更新
java·开源商城系统·tigshop
洛水水7 小时前
【力扣100题】30.二叉树的直径
算法·leetcode·职场和发展
REDcker7 小时前
C++变量存储与ELF段布局详解 从const全局到rodata与nm_readelf验证实践
java·c++·面试
gihigo19987 小时前
Bezier曲线曲面生成算法
算法
kobesdu8 小时前
【ROS2实战笔记-19】ROS2 生命周期节点的启动顺序、状态转换陷阱与热备方案
java·前端·笔记·机器人·ros·ros2