题目链接:
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
算法思想:
使用双指针的思想,定义两个指针left和right,计算盛放的水的时候(长*宽),长就是两个水柱之间的距离,宽就是相对应两个水柱之间较矮的一边,left指针从左往右遍历,right指针从右往左遍历,中止条件是left=right;我们需要求的是最大的面积,left和right指针之间的距离在不断减小,也就是说长在减小,所以想获得更大的面积的话必须获取到更大长度的高
left指针和right指针更新的条件:
因为长在不断缩小,当height[left] <= height[right]时,left++(这样才有可能使得left指针对应的高更大),反之right--
public int maxArea(int[] height) {
int left = 0;
int right = height.length-1;
int ret = 0;
while(left < right) {
int sum = Math.min(height[left], height[right]) * (right - left);
ret = Math.max(sum, ret);
//left和right的更新条件
if(height[left] <= height[right]) {
left++;
} else {
right--;
}
}
return ret;
}