给出n个数字,表示一个高程图,高程图中每一条的宽度为1,请计算下雨之后这个地形可以存储多少水
例如
给出[0,1,0,2,1,0,1,3,2,1,2,1],返回6.
思路:
分别找到每个位置左右最高的部分,然后按照左右最高值的较小值作为高度,减去这个位置的高度就是这个位置能存水的量,所有位置能存水的量加起来就是总的蓄水量。
package main
/**
*
* @param A int整型一维数组
* @return int整型
*/
func trap( A []int ) int {
// write code here
//求出每个位置左侧最高的位置
length := len(A)
if length == 0 {
return 0
}
leftMax := make([]int, length)
leftMax[0] = 0
for i := 1; i < length; i++ {
if A[i-1] > leftMax[i-1] {
leftMax[i] = A[i-1]
} else {
leftMax[i] = leftMax[i-1]
}
}
//求出每个位置右侧最高的位置
rightMax := make([]int, length)
rightMax[length-1] = 0
for i := length - 2; i >= 0; i-- {
if A[i+1] > rightMax[i+1] {
rightMax[i] = A[i+1]
} else {
rightMax[i] = rightMax[i+1]
}
}
res := 0
for i := 1; i < length-1; i++ {
if A[i] < leftMax[i] && A[i] < rightMax[i] {
if leftMax[i] < rightMax[i] {
res += leftMax[i] - A[i]
} else {
res += rightMax[i] - A[i]
}
}
}
return res
}