题目
截图来自官方
代码
class Solution {
// 自己想的最常规的方法,就是按顺序全部遍历一遍,然后每次计算时用小的那个数字当高。每次算出面积后都和当前保存的res比较下,大于时替换,最终返回。
// public int maxArea(int[] height) {
// int res=0;
// for(int i=0;i<height.length-1;i++){
// for(int j=i+1;j<height.length;j++){
// int min=Math.min(height[i],height[j]);
// int area=min*(j-i);
// if(area>res){
// res=area;
// }
// }
// }
// return res;
// }
// 官方解法,双指针,注意解析中说的“小的那个没有当边界的价值了”
public int maxArea(int[] height) {
int res=0;
int left=0;
int right=height.length-1;
while(left<right){
int temp=Math.min(height[left],height[right])*(right-left);
res=Math.max(res,temp);
if(height[left]<height[right]){
left++;
}else right--;
}
return res;
}
}