双指针。因为最大值肯定是在其中的,从两边慢慢的检查并且记录最大值。移动短板,因为不管是短板移动还是长版移动,整个装水的矩形长度肯定是要减一的,并且这个矩形的面积是由短板那边决定的,如果移动长版,长度减一,但是短板那边不变,整个面积最大值肯定是减小了,而移动短板,长版那边不变,虽然长度减一了,但是可能短板变成了更高的一个短板了,整个面积就有可能变大。
class Solution {
public int maxArea(int[] height) {
int left = 0;
int right = height.length - 1;
int max = 0;
while(left < right){
max = height[left] < height[right] ?
Math.max(max, (right-left) * height[left++]) :
Math.max(max, (right-left) * height[right--]);
}
return max;
}
}