【面试题】接雨水

简介: 【面试题】接雨水

接雨水

仅学习

一、问题描述

二、解调思路

这个问题是一个典型的双指针问题,也称为"接雨水问题"。我们可以通过遍历数组两次来解决这个问题:一次从左到右,一次从右到左,分别记录每个位置左边和右边的最大高度。然后,可以计算每个柱子能够接住的雨水量,即两边较小的最大高度减去当前柱子的高度,如果这个值大于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、超声等,将这些设备产生的数字影像转换成标准格式,进行存储和管理,以便医生和专业技术人员进行诊断和治疗。
381 4
|
缓存 人工智能 算法
深度揭秘复杂异构硬件推理优化
本文介绍了大语言模型在部署推理层面的性能优化工作,涵盖高性能算子、量化压缩、高效运行时及分布式调度四个方面。面对参数和上下文规模增长带来的显存、缓存与计算开销挑战,文中详细探讨了如何通过优化算子性能、低精度量化压缩、异步运行时框架设计以及多层次分布式架构来提升大模型推理效率。此外,还展示了BladeLLM引擎框架的实际应用效果,证明了这些技术在高并发场景下的显著性能提升。
|
中间件 Linux vr&ar
Centos7升级Glibc
Centos7升级Glibc
2403 6
|
人工智能 Dart 安全
SonarQube Server 2025 Release 2 发布 - 代码质量、安全与静态分析工具
SonarQube Server 2025 Release 2 发布 - 代码质量、安全与静态分析工具
309 4
SonarQube Server 2025 Release 2 发布 - 代码质量、安全与静态分析工具
|
存储 设计模式 算法
一文讲透自适应熔断的原理和实现
一文讲透自适应熔断的原理和实现
|
存储 缓存 人工智能
【AI系统】GPU 工作原理
本文详细解析了AI计算体系中的GPU工作原理,重点介绍了GPU与CPU在架构上的差异,强调了GPU在并行计算方面的优势。文章通过$AX+Y$的例子,展示了GPU如何通过并行和并发提高计算效率,并深入探讨了GPU的缓存机制及线程原理,解释了GPU如何通过大量线程和Warp来掩盖延迟问题,实现高效计算。
1160 0
|
缓存 前端开发 JavaScript
React.memo 与 useMemo 超厉害!深入浅出带你理解记忆化技术,让 React 性能优化更上一层楼!
【8月更文挑战第31天】在React开发中,性能优化至关重要。本文探讨了`React.memo`和`useMemo`两大利器,前者通过避免不必要的组件重渲染提升效率,后者则缓存计算结果,防止重复计算。结合示例代码,文章详细解析了如何运用这两个Hook进行性能优化,并强调了合理选择与谨慎使用的最佳实践,助你轻松掌握高效开发技巧。
706 0
|
测试技术 API Apache
使用 Apache JMeter 吞吐量控制器的详细指南
Apache JMeter是开源的负载和性能测试工具,其吞吐量控制器用于控制采样器执行频率以达到特定吞吐量。要使用它,首先启动JMeter,创建测试计划,添加线程组和逻辑控制器。配置吞吐量控制器的参数,如总执行次数或百分比,并添加HTTP请求采样器。例如,创建两个控制器,一个设定执行次数,另一个设定执行百分比。通过监听器如汇总报告和查看结果树来分析测试结果,从而模拟不同负载并识别性能瓶颈。吞吐量控制器是实现复杂测试场景的关键组件。
|
搜索推荐 Java
Java异常:IllegalArgumentException Collections.sort报错
Java异常:IllegalArgumentException Collections.sort报错
327 0
|
机器学习/深度学习 自然语言处理 数据可视化
【Python百宝箱】数据科学的黄金三角:数据挖掘和聚类
【Python百宝箱】数据科学的黄金三角:数据挖掘和聚类
538 2