码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 面试金典--面试题 17.21. 直方图的水量(不困难的困难题)


    文章目录

    • 题目描述
    • 思路分析
    • 完整代码

    题目描述

    给定一个直方图(也称柱状图),假设有人从上面源源不断地倒水,最后直方图能存多少水量?直方图的宽度为 1。

    在这里插入图片描述

    上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的直方图,在这种情况下,可以接 6 个单位的水(蓝色部分表示水)。

    示例:
    输入: [0,1,0,2,1,0,1,3,2,1,2,1]
    输出: 6

    思路分析

    观察图片可知,总面积=黑色面积+蓝色面积。

    黑色面积很好求,直接sum(所给数组)就行了。
    蓝色面积是答案。所以问题转化成求图中的总面积。

    这个其实也很好处理,我们一层一层的去求就好了。

    按照所给示例:height=[0,1,0,2,1,0,1,3,2,1,2,1]
    第一层:
    left=0,right=11,high=1 (high代表当前层数)。当左右指针指向的区域高度小于high时,左右指针都向中间移动,直到指针指向区域大于等于high的值。若不小于high,则指针不移动。
    left不断向右靠近,在第一层left=1时,left和right在输入数组height中的数值都大于当前遍历的层数high。所以第一层的体积就是right-left+1

    在这里插入图片描述

    第二层:在这里插入图片描述
    第二层,high = 2,left一直向右移动到left = 3,right向左移动到right = 10。所以第二层体积:right - left + 1 = 8。

    第三层同理为1。

    所以最后的答案就是,刚求得的总体积-所给数组的和。

    完整代码

    class Solution:
        def trap(self, height: List[int]) -> int:
            if not height:
                return 0
            zhuzi = sum(height)
            length = 1 # 表示第几层
            res = 0
            while length<=max(height):
                left = 0
                right = len(height)-1
                while height[left]<length:
                    left+=1
                while height[right]<length:
                    right-=1
                res += right-left+1
                length+=1
            return res-zhuzi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • 相关阅读:
    软件开发项目文档系列之十三如何撰写用户操作手册
    FPGA之旅设计99例之第二十例---SDRAM存储器实现
    springboot中aop的代理模式
    如果C盘满了怎么办
    python re findall search finditer complie 预加载
    从根上理解Cglib与JDK动态代理
    剑指Offer05-替换空格
    python之阈值分割
    Google Earth Engine ——快速实现MODIS影像NDVI动画的在线加载并导出
    一文看懂推荐系统:Gate网络2:百度GemNN(Gating-Enhanced Multi-Task Neural Networks)
  • 原文地址:https://blog.csdn.net/qq_38737428/article/details/133707756
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号