1、题目
2、题解
最初的想法是直接采用最暴力的解题思路,遍历所有可能的情况,然后求得最大值。但最后还是看了题解,采用了更简单的思路,如下:
设计两头指针分别指向数组的开始和结尾,每次柱子较短的一方移动,头尾指针向中心靠拢。
移动规则,移动到比当前柱子更高的柱子为止,原因如下:
1)随着柱子的内移,容量的长会逐渐变短。
2)随着长不断变小,柱子作为容量的高如果不能增大则整体容量不会增大。
代码如下(Go语言实现):
func maxArea(height []int) int {
var start, end int = 0, len(height)-1
var maxarea int = 0
for start < end {
hs := height[start]
he := height[end]
maxarea_ := Min(hs, he)*(end-start)
maxarea = Max(maxarea, maxarea_)
if hs<=he{
for hs>=height[start] && start<end{
start=start+1
}
}else{
for he>=height[end] && start<end{
end=end-1
}
}
}
return maxarea
}
func Max(a,b int) int {
if a>=b{
return a
}else{
return b
}
}
func Min(a,b int) int {
if a<=b{
return a
}else{
return b
}
}