题目
题解
双指针,左边从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 春招闯关活动」, 点击查看。