本题是典型的双指针应用场景。题目的要求是求取容积最大值,容积公式 area = Math.min(a,b) * Math.abs(b-a)
初始的left = 0, right = len -1. 容积计算后,每次移动较短的一边(left++/right--).之所以移动较短边的原因是,容积公式中是较短边s * 两边距离d。d一定减小,如果希望容积增大,那么必须是较短边变长。因此移动较长边无效
class Solution {
public int maxArea(int[] height) {
int len = height.length;
int left =0,right = len -1;
int max = 0, result = 0;
// 双指针循环结束条件
while(left < right) {
result = Math.min(height[left],height[right]) * (right - left);
max = Math.max(result,max);
// 每次移动较短边,相等时,移动任意一边
if (height[left] < height[right]) left ++;
else right --;
}
return max;
}
}
Q.E.D.