//这道题要求采用双指针,那么我们直接定义一个左指针指向数组第一个元素,右指针 //指向数组最后一个元素,然后开始计算此时盛水面积,保存了第一个面积之后 //我们就要思考如何求出最大面积,因为我们已经用了第一个元素和最后一个元素的面积 //我们发现这两个元素中任意一个元素与中间元素的组合都无法突破第一个面积 //这是因为即使中间的值比首尾大,也只能取首尾的值,而此时宽度却减小了 //如果中间的值小,那么不仅高度变小,宽度也变小了 //所以我们要想取得新的突破,只能移动指针,而移动指针当然是移动较小值得那个指针 //留下值较大的那个指针,以期望匹配更大的高度,由此循环往复,直到左右指针相遇,终止循环 int maxArea(int* height, int heightLen ) { int left=0,right=heightLen-1;//定义左右指针 int max=0;//初试化最大值 while(left<right){ int min; if(height[left]<=height[right]) //求出较小的高度,木桶效应 min=height[left]; else min=height[right]; if(min*(right-left)>max) max=min*(right-left); //更新最大值 if(height[right]<=height[left]) right--;//移动较小指针 else left++; } return max; }