题目链接

本题是典型的双指针应用场景。题目的要求是求取容积最大值,容积公式 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.


每一个平凡的日常都是连续的奇迹