力扣链接: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}