经典算法题 - 接雨水

前言
1 | |
知识点
- 双指针、动态规划
描述
- 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。

示例1
- 输入:[3, 1, 2, 5, 2, 4]
- 输出:5
- 说明:如上图,数组 [3, 1, 2, 5, 2, 4] 表示柱子高度,这种情况下可以接5个单位的雨水,图中蓝色部分。
示例2
- 输入:[4, 5, 1, 3, 2]
- 输出:2
思路
- 这是典型的双针对问题。左指针指向左边,右指针指向右边。
- 计算每一列可以存储的水量,这必然要有一个最值,减去当前格子的存水量,这个存水量最后要累加。
- 如果左指针小,右指针向右移动,否则右指针向左移动,直到两指针相邻或相遇
代码
1 | |
总结
- 接雨水问题是字节最爱问的题,说是难度为困难,但其实根本达不到困难的级别
- 掌握好双指针的思路,其实很好解。
经典算法题 - 接雨水
http://jxr202.github.io/algorithm/algorithm_001-8db36b01b199/