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
}

你可能感兴趣的:(golang)