python力扣42.接雨水

news/2025/3/22 21:17:42/

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

示例 1
输入:height = [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 个单位的雨水(蓝色部分表示雨水)。

示例 2:

输入:height = [4,2,0,3,2,5]
输出:9

提示
n == height.length 1 <= n <= 2 * 104 0 <= height[i] <= 105

我最开始的思路是将这道题转化为一道数学问题:能影响每个单位的储水量的是左右两边柱子的最大值(即最高的柱子),而决定储水量的则是这两个值中最小的值。所以我们只需要创建两个数组,分别储存每个单位的左边和右边的最大值,然后再次遍历,进行比较,如果该单位柱子均低于左右两边最大值(也就是呈现“凹”字型),那就是可储水,再计算两边最低的柱子高度当作储水量即可。

思路没问题,通过了很多测试用例,但在height数组数量较大时,却出现了超时的问题。
在这里插入图片描述
继续改进。
1.时间超出限制主要是因为我使用了很多max和min,那么可以使用递归来降低时间复杂度,创建left_max和right_max数组,每次比较的是当前height中的数值和前一个位置的left_max,从而取出最大的当前位置的left_max,而不是每次都要算一遍前面所有高度的max。
2.添加了n==0就return0的条件,更严谨了。

python"># 31ms 14.2mb
class Solution(object):def trap(self, height):""":type height: List[int]:rtype: int"""n = len(height)if n == 0:return 0left_max = [0]*nright_max = [0]*nleft_max[0] = height[0]for i in range(1,n):left_max[i] = max(height[i], left_max[i-1])right_max[n-1] = height[n-1]for i in range(n-2,-1,-1):right_max[i] = max(height[i], right_max[i+1])ans = 0for i in range(n):ans += min(left_max[i], right_max[i]) - height[i]return ans

http://www.ppmy.cn/news/1581230.html

相关文章

Kotlin标准函数库学习

apply&#xff1a;apply 函数可看作一个配置函数&#xff1a;你可以传入一个接收者&#xff0c;然后调用一系列函数来配置它以便使用。如果提供lambda 给apply 函数执行&#xff0c;它会返回配置好的接收者。 apply 可以用在初始化时&#xff0c;的不断引用的情况。 //原始代…

在 Windows 系统下,将 FFmpeg 编译为 .so 文件

1. 准备环境 确保你的 Windows 系统已安装以下工具&#xff1a; Android Studio NDK&#xff08;Native Development Kit&#xff09; MSYS2&#xff08;用于提供类 Unix 环境&#xff09; FFmpeg 源码 Git Bash&#xff08;可选&#xff0c;推荐使用&#xff09; 安装 …

【leetcode hot 100 78】子集

解法一&#xff1a;回溯法 class Solution {public List<List<Integer>> subsets(int[] nums) {List<List<Integer>> result new ArrayList<List<Integer>>();List<Integer> temp new ArrayList<Integer>();backtrace(0, n…

uniapp整合SQLite(Android)

一. 在uni-app项目中, 链接SQLite 前端开发人员 应特殊需求, 需通过链接SQLite(关系型数据库) ,存储大量数据在Android/ios上 在项目中勾选此选项,确保相关权限 二、代码实现 <template><view class"content"><image class"logo" src"…

Flask实时监控:打造智能多设备在线离线检测平台(升级版)

前言 武林之中&#xff0c;最讲究的便是“掌控”。若是手下弟子忽然失踪&#xff0c;若是江湖好友生死未卜&#xff0c;岂不令人寝食难安&#xff1f;今日&#xff0c;吾等化身技术侠客&#xff0c;祭出Flask实时监控大法&#xff0c;打造一款智能多设备在线离线检测平台&…

如何生成汽车二维码?从应用到生成的实用指南

无论是在新车销售、售后服务还是车队管理中&#xff0c;汽车二维码都展现了巨大的应用潜力。本文将深入探讨汽车二维码的实际应用场景及生成方法&#xff0c;帮助您更全面地了解这一智能工具。 汽车二维码的实际应用场景 1. 车辆展示信息数字化 汽车展厅和经销商使用汽车二维…

1.7 无穷小的比较

1.定义 2.性质 3.无穷小的比较 3.1等价无穷小的性质 3.2 常见等价无穷小

ffmpeg库视频硬编码使用流程

‌一、硬件编码核心流程‌ ‌硬件设备初始化 // 创建CUDA硬件设备上下文‌ AVBufferRef *hw_device_ctx NULL; av_hwdevice_ctx_create(&hw_device_ctx, AV_HWDEVICE_TYPE_CUDA, NULL, NULL, 0);// 绑定硬件设备到编码器上下文‌ codec_ctx->hw_device_ctx av_buffer_…