题目
思路
定义一个left指针和一个right指针,分别指向数组的第0个元素和最后一个元素,此时right - left就是容器的长。 此时我们有了容器的长,如果想让容器的面积更大,则选取的高应该也要尽量更大。left和right指针指向的数组元素就是容器的高。如果left指向的数组元素小于right指向的数组元素,则代表此时right当作容器的高所求出来的面积比left当作容器的高所求出的面积大,则保留right,将left + 1,反之则right - 1。即每次循环都比较left和right的大小,保留较大的一边当作其中一条高,使每次循环的面积尽可能大。最后保留最大的面积即可。
代码
public int maxArea(int[] height) {
int left = 0;
int maxarea = 0;
int right = height.length - 1;
while(left < right) {
maxarea = Math.max((right - left) * Math.min(height[left],height[right]),maxarea);
if(height[left] > height[right]) {
right--;
}
else {
left++;
}
}
return maxarea;
}
|