给你 n 个非负整数 a1,a2,…,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器。
用双指针来解决这个问题。一个指向容器的左边界(x),一个指向容器的右边界(y),题目说的是盛水,那么只能以(x, y)中最小的作为高了,那么底就是容器两边界的距离,假设用t表示,容器的面积为area = min(x,y)*t 。题目要求的是盛最多水的容器,也就是要找到面积最大的。
起初x指向的是数组起点,y指向的是数组最右边,求此时容器的面积,假设容器最大面积为0,将两个面积相比,记录下最大的。然后移动高最小的那个指针,如果x小于y的话,就x++,如果y 那么这里就有一个问题了,为什么是移动最高最小的指针?假设xclass Solution {
public int maxArea(int[] height) {
//采用双指针的思想,一个代表左边界,一个代表有边界
int l=0;
int r=height.length-1;
int mArea=0; //代表面积
//只有左指针=右指针后才算结束
while(l



