【面试题】接雨水

简介: 【面试题】接雨水

接雨水

仅学习

一、问题描述

二、解调思路

这个问题是一个典型的双指针问题,也称为"接雨水问题"。我们可以通过遍历数组两次来解决这个问题:一次从左到右,一次从右到左,分别记录每个位置左边和右边的最大高度。然后,可以计算每个柱子能够接住的雨水量,即两边较小的最大高度减去当前柱子的高度,如果这个值大于0,则表示可以接住雨水。

三、代码

def trap(height):
    if not height:
        return 0

    n = len(height)
    left_max = [0] * n
    right_max = [0] * n
    water_trapped = 0

    # 从左到右找到每个位置左边的最大高度
    left_max[0] = height[0]
    for i in range(1, n):
        left_max[i] = max(left_max[i - 1], height[i])

    # 从右到左找到每个位置右边的最大高度
    right_max[n - 1] = height[n - 1]
    for i in range(n - 2, -1, -1):
        right_max[i] = max(right_max[i + 1], height[i])

    # 计算雨水量
    for i in range(n):
        water_trapped += min(left_max[i], right_max[i]) - height[i]

    return water_trapped

# 示例
print(trap([0,1,0,2,1,0,1,3,2,1,2,1]))  # 输出:6
print(trap([4,2,0,3,2,5]))  # 输出:9

这段代码首先定义了一个函数trap,它接受一个表示柱子高度的列表。然后,使用两个数组left_max和right_max来分别存储每个位置左边和右边的最大高度。接着,遍历这个列表两次,一次从左到右,一次从右到左,填充这两个数组。最后,遍历原始的height列表,计算每个位置能够接住的雨水量,并将它们累加起来得到最终的结果。


相关文章
|
存储 机器学习/深度学习 安全
PACS覆盖放射、超声、内镜、病理等医技科室业务流程
医学影像PACS系统(Picture Archiving and Communication System)是一个医院信息系统,用于存储、检索、传输和显示医学影像。它可以集成多种医疗设备,如X光机、CT、MRI、超声等,将这些设备产生的数字影像转换成标准格式,进行存储和管理,以便医生和专业技术人员进行诊断和治疗。
300 4
|
12月前
|
缓存 人工智能 算法
深度揭秘复杂异构硬件推理优化
本文介绍了大语言模型在部署推理层面的性能优化工作,涵盖高性能算子、量化压缩、高效运行时及分布式调度四个方面。面对参数和上下文规模增长带来的显存、缓存与计算开销挑战,文中详细探讨了如何通过优化算子性能、低精度量化压缩、异步运行时框架设计以及多层次分布式架构来提升大模型推理效率。此外,还展示了BladeLLM引擎框架的实际应用效果,证明了这些技术在高并发场景下的显著性能提升。
|
存储 缓存 人工智能
【AI系统】GPU 工作原理
本文详细解析了AI计算体系中的GPU工作原理,重点介绍了GPU与CPU在架构上的差异,强调了GPU在并行计算方面的优势。文章通过$AX+Y$的例子,展示了GPU如何通过并行和并发提高计算效率,并深入探讨了GPU的缓存机制及线程原理,解释了GPU如何通过大量线程和Warp来掩盖延迟问题,实现高效计算。
640 0
|
缓存 前端开发 JavaScript
React.memo 与 useMemo 超厉害!深入浅出带你理解记忆化技术,让 React 性能优化更上一层楼!
【8月更文挑战第31天】在React开发中,性能优化至关重要。本文探讨了`React.memo`和`useMemo`两大利器,前者通过避免不必要的组件重渲染提升效率,后者则缓存计算结果,防止重复计算。结合示例代码,文章详细解析了如何运用这两个Hook进行性能优化,并强调了合理选择与谨慎使用的最佳实践,助你轻松掌握高效开发技巧。
540 0
|
开发工具 git 开发者
使用Git进行版本控制的最佳实践
【6月更文挑战第3天】使用Git进行版本控制的最佳实践包括:初始化配置Git仓库,设置个人信息和默认编辑器;提交信息要简洁明了,使用有意义的标题和描述;分支管理中,为新功能或修复创建分支,定期合并并保持主分支稳定;进行代码审查以保证质量;使用标签标记里程碑;忽略不必要的文件;定期备份仓库并学会恢复操作;不断学习和实践Git的高级用法。遵循这些实践可提升开发效率和代码质量。
|
SQL 数据处理 数据库
如何理解SQL中的自连接?
说起自连接,想必小伙伴们都听说过。在进行数据处理时经常会使用到自连接,特别是像一些连续性的问题中使用的比较多。
如何理解SQL中的自连接?
|
搜索推荐 Java
Java异常:IllegalArgumentException Collections.sort报错
Java异常:IllegalArgumentException Collections.sort报错
244 0
|
安全 Java 测试技术
Python 官方研讨会:彻底移除 GIL 真的可行么?
Python 官方研讨会:彻底移除 GIL 真的可行么?
293 0
|
小程序 数据安全/隐私保护 UED
微信小程序-hidden属性
微信小程序可有意思了
2094 0