牛客网: BM93
题目: 最多能盛水多少
思路: 初始化双指针left, right = 0, n-1;maxL, maxR = height[left],height[right]; 循环更新left与right之间的面积,同时移动maxL与maxR中的较小者并更新
代码:
// go
package main
// import "fmt"
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param height int整型一维数组
* @return int整型
*/
func max(x, y int) int {
if x > y {return x} else {return y}
}
func min(x, y int) int {
if x < y {return x} else {return y}
}
func maxArea( height []int ) int {
// write code here
if len(height) < 2 {
return 0
}
res := 0
left, right := 0, len(height) - 1
maxL, maxR := height[left], height[right]
for left < right {
res = max(res, min(maxL, maxR)*(right - left))
if maxL < maxR {
left++
maxL = height[left]
} else {
right--
maxR = height[right]
}
}
return res
}