
双指针
- 创建两个指针(l,r)指向数组的首和尾,
- for循环,退出条件(l>r)
- 比较l和r的高度,每次移动低的那一个指针
- 每次移动完,维护一下最优解
- for循环结束,输出最优解
func maxArea(height []int) int {
l,r := 0,len(height)-1
ans := (r-l) * min(height[l],height[r])
for l < r {
if height[l] < height[r] {
l++
if height[l] > height[l-1] {
if ans < (r-l) * min(height[l],height[r]) {
ans = (r-l) * min(height[l],height[r])
}
}
} else{
r--
if height[r] > height[r+1] {
if ans < (r-l) * min(height[l],height[r]) {
ans = (r-l) * min(height[l],height[r])
}
}
}
}
return ans
}
func min(a,b int) int {
if a < b {
return a
}
return b
}