011-盛最多水的容器 Container With Most Water

Description

给定 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。 在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。 找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

NOTE

说明:你不能倾斜容器,且 n 的值至少为 2。 image

Example
Input: [1,8,6,2,5,4,8,3,7]
Output: 49
Solution
//01 暴力破解
func maxArea(height []int) int {
    maxArea := 0
    for i := 0; i < len(height);i ++ {
        for j := i +1;j < len(height); j ++ {
            maxArea = maxInt(maxArea,minInt(height[i],height[j]) *(j - i))
        }
    }
    return maxArea
}

func maxInt(a,b int)int  {
    if a > b {
        return a
    }
    return b
}
func minInt(a,b int)int  {
    if a > b {
        return b
    }
    return a
}

//02 双指针计算
func maxArea1(height []int) int {
    maxArea := 0
    left := 0
    right := len(height)-1
    for left < right {
        maxArea = maxInt(maxArea,minInt(height[left],height[right])*(right - left))
        if height[left]<height[right] {
            left++
        }else {
            right--
        }
    }
    return maxArea
}

leetCode地址