LeeCode 【42.接雨水】
题目描述 :
给定 n 个非负整数表示每个宽度为1 的主机的高度图,计算按此排列的主子,下雨之后能接多少雨水。
示例
- 输入: [0,1,0,2,1,0,1,3,2,1,2,1]
- 输出:6
思路 1
使用逼近的思想,左右两个指针,分别指向首个元素、末尾元素。比较两个元素的大小,赋值于min,然后判断l、r位置的元素哪个是这个min,如果是height[l], 则继续用其相邻元素和其比较,如果小于它,则两者之差就是所要求的雨水的柱子。另外的heihgt[r]和它类似。
代码 1
1 | class Solution { |
思路 2
上面的思路只需要遍历依次即可,而这个需要遍历两次,第一次需要从左到右求出相邻元素的最大边界值,这是向左看齐的,得出left数组。第二次需要从右向左求出相邻元素的最大值,这是向右看齐的,得出right数组。最后再遍历一次height数组,比较相同位置的left和right,取较小的值减去相应的height值,即可得出该位置可以蓄水的高度。
1 |
|
完整代码
1 | package nod1995; |