码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • LeetCode 42. Trapping Rain Water


    Given n non-negative integers representing an elevation map where the width of each bar is 1, compute how much water it can trap after raining.

    Example 1:
    在这里插入图片描述

    Input: height = [0,1,0,2,1,0,1,3,2,1,2,1]
    Output: 6
    
    • 1
    • 2

    Explanation: The above elevation map (black section) is represented by array [0,1,0,2,1,0,1,3,2,1,2,1]. In this case, 6 units of rain water (blue section) are being trapped.

    Example 2:

    Input: height = [4,2,0,3,2,5]
    Output: 9
    
    • 1
    • 2

    题解

    这道题和常规的动态规划题目不一样,不容易用数学语言来表达,但仍可以借鉴动态规划的思路,由少至多计算出结果。
    定义: 定义函数 f ( i ) f(i) f(i)表示下标区间为 [ 0 , i ] [0, i] [0,i] 的柱子能接住的雨水数量。
    已知: 第k根柱子的高度为 h e i g h t [ k ] height[k] height[k], 下标区间为 [ 0 , i − 1 ] [0, i-1] [0,i−1] 的柱子能接到的雨水数量为 f ( i − 1 ) f(i-1) f(i−1)
    引入变量: 在当前数组末尾追加1根柱子
    分析影响: 第i根柱子的引入不会使之前已接到的雨水数量减少,新增加的数量为前面的柱子能映射到第i根柱子上的面积乘以柱子间的距离,假设用 g ( i ) g(i) g(i) 来表示引入第i根柱子带来的新增水量,则题目的难度蜕变为求 g ( i ) g(i) g(i)。 g ( i ) g(i) g(i) 不是很好用数学公式来表达,如何推导在此不做赘述,大致思路是求水平方向上映射的阴影面积。

    编程实现:

    func trap(height []int) int {
    	area := 0
    	var crntH int
    	var crntW int
    	for i := 0; i < len(height); i++ {
    		if i < 2 {
    			continue
    		}
    		crntH = height[i-1]
    		for j := i - 2; j >= 0; j-- {
    			if height[j] <= crntH || height[i] <= crntH {
    				continue
    			}
    			crntW = i - j - 1
    			if height[j] < height[i] {
    				area += (height[j] - crntH) * crntW
    				crntH = height[j]
    			} else {
    				area += (height[i] - crntH) * crntW
    				break
    			}
    		}
    		println(area)
    	}
    	return area
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
  • 相关阅读:
    Android Glide in RecyclerView,only load visible item when page return,Kotlin
    鸿蒙会成为安卓的终结者吗?
    Spring编程常见错误50例-Spring AOP常见错误(上)
    地表水与地下水耦合模拟
    治数如治水,数据治理和数据创新难在哪?
    nrm 镜像源管理工具
    SpringCloud AlibabaSentinel实现熔断与限流(1)
    洛谷刷题C语言:闰年判断、Apples、洛谷团队系统、肥胖问题、三位数排序
    docker数据目录迁移
    【Linux基础】2.2 运行级别、找回root密码、帮助、文件目录、查看文件,重定向,查看历史指令
  • 原文地址:https://blog.csdn.net/codeman_cdb/article/details/126654010
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号