题解
首先,暴力解法会比较简单,对于每个线,去算和其他线的面积,然后选出一个最大值,但是这样时间复杂度是o(n^2^),leetcode会超时。
然后是双指针算法,代码会比较简单,主要是需要证明算法的正确性。
木桶的容量由短板决定,移动长板的话,木桶的容量一样不会发生变化,所以只有移动短板,才有可能让水位上升。
暴力解法
func maxArea(height []int) int {
res := 0
for i := 0; i < len(height); i++ {
tmp := 0
for j := i; j < len(height); j++ {
tmp = maxInt(tmp, (j-i)*minInt(height[i], height[j]))
}
res = maxInt(res, tmp)
}
return res
}
func maxInt(x, y int) int {
if x > y {
return x
}
return y
}
func minInt(x, y int) int {
if x > y {
return y
}
return x
}
双指针解法
func maxArea(height []int) int {
var (
i = 0
j = len(height) - 1
res = 0
)
for i < j {
res = maxInt(res, (j-i)*minInt(height[i], height[j]))
if height[i] < height[j] {
i++
} else {
j--
}
}
return res
}
func maxInt(x, y int) int {
if x > y {
return x
}
return y
}
func minInt(x, y int) int {
if x > y {
return y
}
return x
}