力扣链接:https://leetcode-cn.com/probl...
解题思路:
- 接雨水这个问题算是数组中比较经典的问题,还是先指出关键算法:双指针
- 接下来还是老办法,分析题干,由题目可知,因为数组的下标可以看作是横坐标,数组的值可以看作是纵坐标,所以盛雨水最多,实际上是数组中可以围成的最大面积,那么这个最大面积如何计算呢?就是长*高,即数组下标和值所能围成的最大面积
- 采用双指针,慢指针指向数组头,快指针指向数组尾部,面积为快指针下标-慢指针下标与两个下标中较小的高度乘积,记录这个值,当有更大的时候替换这个值
- 数组如果遍历,那自然是较矮的往中间移动,直到两个指针相遇
func maxArea(height []int) int {
n := len(height)
l, r, max := 0, n-1, 0
for l < r {
m := (r - l) * min(height[l], height[r])
if max < m {
max = m
}
if height[l] < height[r] {
l++
} else {
r--
}
}
return max
}
func min(x, y int) int {
if x < y {
return x
}
return y
}
func max(x, y int) int {
if x > y {
return x
}
return y
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。