贪心双指针
这道题属于会做不会证明。一开始两个指针置于最两端,如果固定矮的那个柱子,那么即使移动另一个指针,水面的高度依然是矮的柱子那么高,哪怕另一个指针指向8848米。
所以可以找出两端中矮的指针,一直移动这个指针,直到找出比这个指针高的柱子,计算面积,比较,保存。
public int maxArea(int[] height) {
int left = 0, right = height.length - 1;
int ans = 0;
while (left < right) {
int min = Math.min(height[left], height[right]);
ans = Math.max(ans, (right - left) * min);
while (left < right && height[left] <= min) {
left++;
}
while (left < right && height[right] <= min) {
right--;
}
}
return ans;
}
注意不能写成height[left] < min,否则left和right得不到更新,最外层的while就会一直死循环。
while (left < right && height[left] <= min) {
left++;
}