LeetCode 热题 100:接雨水

本文详细探讨了LeetCode热题‘接雨水’的解决方案,重点介绍了使用双指针算法在Python、Java和C++中的实现,以及算法的时间和空间复杂度分析。并提供了测试用例和相关企业的应用背景。
摘要由CSDN通过智能技术生成

深入探索“接雨水”问题的多语言解决方案

摘要

本文将深入探讨解决“接雨水”问题的多种算法和编程语言实现。这个问题要求我们计算给定柱子高度图在下雨之后能接多少雨水。我们将分析几种不同的算法,并提供 Python、Java 和 C++ 的实现。

1. 问题描述

给定 n 个非负整数表示的柱子高度图,计算按此排列的柱子,下雨之后能接多少雨水。
在这里插入图片描述

2. 输入和输出格式
  • 输入:整数数组 height
  • 输出:能接雨水的总量
3. 示例
  • 示例 1:height = [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6
  • 示例 2:height = [4,2,0,3,2,5] 输出:9
4. 约束条件
  • 1 <= n <= 2 * 10^4
  • 0 <= height[i] <= 10^5
5. 算法分析
  • 暴力解法:对于每个柱子,检查两侧最高的柱子,计算在它们之间的雨水量。
  • 双指针法:使用左右两个指针从两侧向中间逼近,同时维护左右两侧的最高柱子。
6. 多语言实现

我们将使用 Python、Java 和 C++ 来实现双指针法。

Python 实现
def trap(height):
    if not height:
        return 0
    n = len(height)
    left, right = 0, n - 1
    left_max, right_max = 0, 0
    water_trapped = 0

    while left < right:
        if height[left] < height[right]:
            if height[left] >= left_max:
                left_max = height[left]
            else:
                water_trapped += left_max - height[left]
            left += 1
        else:
            if height[right] >= right_max:
                right_max = height[right]
            else:
                water_trapped += right_max - height[right]
            right -= 1
    return water_trapped

# 示例
print(t
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大大怪打LZR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值