题目描述:


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
本文详细解析LeetCode中的接雨水问题,通过四种不同的算法思路进行求解,包括暴力求解、按列计算、动态规划优化、双指针优化动态规划以及单调栈方法。每种方法都配合实例进行讲解,最后总结了算法的时间和空间复杂度,重点介绍了单调栈的解题思想。
最低0.47元/天 解锁文章
639

被折叠的 条评论
为什么被折叠?



