leetcode单调栈系列经典例题——接雨水

本文详细解析LeetCode中的接雨水问题,通过四种不同的算法思路进行求解,包括暴力求解、按列计算、动态规划优化、双指针优化动态规划以及单调栈方法。每种方法都配合实例进行讲解,最后总结了算法的时间和空间复杂度,重点介绍了单调栈的解题思想。
摘要由CSDN通过智能技术生成

42.接雨水

题目描述:

 1.按行计算

思路:求第 i 层的水,遍历每个位置,如果当前的高度小于 i ,并且两边有高度大于等于 i 的,说明这个地方一定有水,水就可以加 1。

总水量可以用sum变量统计,再用一个temp变量表示当前累积的水,

如果求高度为 i 的水,首先用一个变量 temp 保存当前累积的水,从左到右遍历墙的高度,遇到高度大于等于 i 的时候,开始更新 temp。更新原则是遇到高度小于 i 的就把 temp 加 1,遇到高度大于等于 i 的,就 sum += temp ,并且 temp 置零,然后继续循环。

逐个按行计算,先求第一行的水有多少个单位

 计算第1行的水,数组为height= [ 0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1 ];

规则是当temp开始更新时,高度小于1,temp++;高度大于等于1,sum += temp,temp = 0;

初始设置temp = 0;sum = 0;

height[0] = 0 < 1 , 不更新;

height[1] = 1 >= 1 , 开始更新temp;

height[2] = 0 < 1 , temp ++ , temp = 1;

height[3] = 2 >= 1 , sum += temp = 1, temp = 0;

height[4] = 1 >= 1 , sum += temp =1, temp = 0;

height[5] = 0 < 1 , temp ++ , temp = 1;

height[6] = 1 >= 1 , sum += temp = 2 , temp = 0;

剩余height[7]到最后都大于等于1,sum += temp = 2,temp = 0;

结束第一轮循环时,sum = 2;

再求第二行的水

数组为height= [ 0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1 ];

规则是当temp开始更新时,高度小于2,temp++;高度大于等于1,sum += temp,temp = 0;

此时sum=2,初始化temp=0;

height[0] 等于 0 < 2,不更新;

height[1] 等于 1 < 2,不更新;

height[2] 等于 0 < 2,不更新;

height[3] 等于 2 >= 2,开始更新temp;

height[4] 等于 1 < 2,tem ++ ,temp = 1;

height[5] 等于 0 < 2,temp ++ ,temp = 2;

height[6] 等于 1 < 2,temp ++ , temp = 3;

height[7] 等于 3 >= 2,sum += temp = 5,temp = 0;

height[8] 等于 2 >= 2,sum += temp = 5,temp = 0;

height[9] 等于 1 < 2

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

你食不食油饼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值