分析:
任意两柱之间
高的那侧往中间走肯定会使面积减小,因为横向差距缩小,高度缩小或不变
矮的那侧往中间走可能使面积增大,虽然横向差距缩小,但高度可能增大
所以每计算一次面积后,迭代的方式是将矮的那侧往中间走一步,直到左右指针到达同一位置
这题具有左右对称性,从0开始的i和从length-1开始的j是相同地位的,所以可以采取两头向中间逼近的解法
(如果用暴力解法算出每两柱之前的面积,会超时)
// Java代码
class Solution {
public int maxArea(int[] height) {
int i = 0, j = height.length - 1, ans = 0;
while (i != j) {
int area = Math.min(height[i], height[j]) * (j - i);
ans = area > ans ? area : ans;
if (height[j] > height[i])
i++;
else
j--;
}
return ans;
}
}
// Go代码
func maxArea(height []int) int {
ans := 0
for len(height) > 1 {
temp := len(height) - 1
area := 0
if height[temp] > height[0] {
area = temp * height[0]
height = height[1:]
} else {
area = temp * height[temp]
height = height[:temp]
}
if ans < area {
ans = area
}
}
return ans
}