力扣42接雨水(动态规划法)

42. 接雨水 - 力扣(LeetCode)

复习动态规划的思想:

把一个大问题,拆成一堆小问题;小问题只算一次,把结果存起来,后面直接复用,避免重复计算

java 复制代码
class Solution {
    public int trap(int[] height) {
        int n = height.length;

        if (n == 0) {
            return 0;
        }

        // leftMax[i]:下标i位置【左边最高的柱子高度】
        /*(包含i自己)*/
        int[] leftMax = new int[n];
        leftMax[0] = height[0]; 

        for (int i = 1; i < n; ++i) {
            leftMax[i] = Math.max(leftMax[i - 1], height[i]);
        }


        int[] rightMax = new int[n];
        rightMax[n - 1] = height[n - 1]; 

        for (int i = n - 2; i >= 0; --i) {
            rightMax[i] = Math.max(rightMax[i + 1], height[i]);
        }

        int ans = 0;
     
        for (int i = 0; i < n; ++i) {
            ans += Math.min(leftMax[i], rightMax[i]) - height[i];
        }
        return ans;
    }
}

i 这个位置,能接住水的高度 = 左右两侧最高柱子里更矮的那一根的高度 − 当前柱子本身高度

(多读几遍)

相关推荐
weixin_307779131 小时前
RAG 级联失效分析——面试中的错误归因艺术
人工智能·python·面试·职场和发展
CQU_JIAKE1 小时前
10.31[A]
算法·深度优先
zwc32104320551 小时前
Day 5:threshold与inRange阈值分割
c++·图像处理·人工智能·opencv·算法·计算机视觉
云-缩影1 小时前
实际项目中怎么选排序算法:从面试题到工程落地
java·算法·排序算法
Pniubi2 小时前
力扣46全排列(回溯(递归))
算法·leetcode·职场和发展
文丑颜不良啊2 小时前
LeetCode1461~1480题目解析
java·leetcode
ZhengEnCi11 小时前
Agent 架构怎么选:从单 Agent 到多 Agent 编排的选型决策指南
算法·架构
秋天的怀念_David12 小时前
第二十二夜 · 数字迷雾
java·程序人生·算法
Pniubi12 小时前
力扣283移动零(双指针法)
算法·leetcode·职场和发展