这道题是面试中一个比较经典的提醒,通过这道题的完成,我们可以对算法有一个更好的理解。
大多数人不会想到要用双指针解法,双指针解法的难点在于如何移动指针。
定义两个指针,分别为左指针和右指针。
盛水最大水量=较短板*下面的间隔长
开时定义左指针为最左边的长度,右指针为右边的长度,取他们之间的较小值和底边相乘。如果较小的指针是左指针就让它向右边移动,如果是右指针就让它向左移动。直到左右两个指针相遇循环结束。
代码如下:
int maxArea(int* height, int heightSize){ int left=0,right=heightSize-1,area=0,maxarea=0; while (leftif(hight[right] area=hight[right]*(right-left); if(area>maxarea) {maxarea=area; } right--; } else{area=hight[left]*(right-left); if(area>maxarea) {maxarea=area; } left++; } } return maxarea; }