乐趣区

关于golang:Leetcode专题数组11盛雨水最多的容器

力扣链接:https://leetcode-cn.com/probl…
解题思路:

  1. 接雨水这个问题算是数组中比拟经典的问题,还是先指出要害算法:双指针
  2. 接下来还是老办法,分析题干,由题目可知,因为数组的下标能够看作是横坐标,数组的值能够看作是纵坐标,所以盛雨水最多,实际上是数组中能够围成的最大面积,那么这个最大面积如何计算呢?就是长 * 高,即数组下标和值所能围成的最大面积
  3. 采纳双指针,慢指针指向数组头,快指针指向数组尾部,面积为快指针下标 - 慢指针下标与两个下标中较小的高度乘积,记录这个值,当有更大的时候替换这个值
  4. 数组如果遍历,那天然是较矮的往两头挪动,直到两个指针相遇
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
}
退出移动版