双指针, 选l,r中高度最小的移动 。然后找第一个高于当前最小高度的下标,然后计算取max更新答案
class Solution {
public int maxArea(int[] height) {
int l = 0, r = height.length-1;
int mm = (r-l)*Math.min(height[l],height[r]);
while(l < r) {
if(height[l] < height[r]) { //选l,r中高度最小的移动
int idx = l;
//找第一个高于当前值的下标,然后计算取max更新答案
while(idx < r&&height[idx] <= height[l]) { //注意这里要idx < r 不然 最外层的循环永远不会停止,因为一直不会 l = r
idx++;
}
l = idx;
mm = Math.max(mm,(r-l)*Math.min(height[l],height[r]));
}
else {
int idx = r;
while(idx > l&&height[idx] <= height[r]) { // idx > l
idx--;
}
r = idx;
mm = Math.max(mm,(r-l)*Math.min(height[l],height[r]));
}
}
return mm;
}
}