go + 动态规划
/**
* max water
* @param arr int整型一维数组 the array
* @return long长整型
*/
func maxWater( arr []int ) int64 {
n:= len(arr)
if n == 0 {
return 0
}
// 1.记录height中的每个元素,从左向右扫描并记录右边的最大高度
// 2.记录height中的每个元素,从右向左扫描并记录右边的最大高度
// 3.将左右位置元素对比取最小的元素,减去数组当前元素的高度
//记录左边每个元素最大高度
leftMax := make([]int, n)
leftMax[0] = arr[0]
for i:=1; i< n; i++{
leftMax[i] = max(leftMax[i-1], arr[i])
}
//记录右边每个元素最大高度
rightMax := make([]int, n)
rightMax[n-1] = arr[n-1]
for i:=n-2; i>=0; i--{
rightMax[i] = max(rightMax[i+1], arr[i])
}
sum := 0
for i:=1; i<n-1; i++{
height := min(leftMax[i], rightMax[i])
sum += max(0, height-arr[i])
}
return int64(sum)
}
func max(a, b int) int {
if a>b{return a}
return b
}
func min(a, b int) int {
if a>b{return b}
return a
} 
京公网安备 11010502036488号