盛最多水的容器 LeetCode 11 |刷题打卡

102 阅读1分钟

题目

image.png

题解

双指针,左边从0开始,右边从a.length-1开始,循环从两头往中间走,左边的i++,右边的j--到底是该i++还是j--比较好理解的是,如果a[i]和a[j]值做比较,因为题解是需要装最多,所有肯定移动a[i]和a[j]比较小的值往中间走,因为我也不确定往中间走会不会遇到比当前值大,所以需要每次用max记录最大的值就是盛最多的水,当找到最中间,(j - i + 1) * moveMinBar:表示每次移动完的面积,最后max就是最大值直接返回。

代码

public static int maxArea(int a[]) {
    int max = 0;
    for (int i = 0, j = a.length - 1; i < j; ) {
        int moveMinBar = a[i] < a[j] ? a[i++] : a[j--];
        max = Math.max(max, (j - i + 1) * moveMinBar);

    }
    return max;
}

备注

本文正在参与「掘金 2021 春招闯关活动」, 点击查看