文章目录
解析
p_0:左”指针”
 p_1:右”指针”
 Area:当前双”指针”代表面积大小
 ret:记录面积最大值
思路
p_0指向数组头部
 p_1指向数组尾部
 Area为当前双”指针”代表的面积
 比较Area与ret大小
若height[p_0]>=height[p_1]
 ——”指针”p_0+1, ”指针”p_1所代表的面积一定小于Area
 ——”指针”p_0, ”指针”p_1-1所代表的面积可能大于Area
 ——要求最大面积, 于是p_1自减1
 height[p_0]<height[p_1]
 ——同理有p_0自加1
原理
如何保证被剔除的p_1/p_0不会与除p_0/p_1外的”指针”形成更大的面积
 证明:
 若height[p_0]>=height[p_1], 则剔出p_1
 ”指针”p_0, ”指针”p_1所代表的面积=(p_1-p_0)*height[p_1]
 存在i>0, ”指针”p_0+i, 与”指针”p_1形成的面积=(p_1-(p_0+i))*min(height[p_0+i], height[p_1])
 比较双方第一项(p_1-p_0) ,(p_1-(p_0+i)) , 得到前者>后者
 比较双方第二项height[p_1], min(height[p_0+i], height[p_1]) , 得到前者>=后者
 于是有
 被剔除的p_1不可能与p_0+i形成更大的面积
height[p_0]<height[p_1], 剔出p_0同理
代码
int maxArea(int* height, int heightSize){
    int p_0=0,p_1=heightSize-1,Area,ret=0;
    while(p_0!=p_1){
        if(height[p_0]>=height[p_1]){
            Area=(p_1-p_0)*height[p_1];
            p_1--;
        }else{
            Area=(p_1-p_0)*height[p_0];
            p_0++;
        }
        if(ret<=Area)ret=Area;
    }
    return ret;
}










