11. Container With Most Water#
1. 题目描述
题目链接
Given n non-negative integers a1, a2, …, an , where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.
Note: You may not slant the container and n is at least 2.
The above vertical lines are represented by array [1,8,6,2,5,4,8,3,7]. In this case, the max area of water (blue section) the container can contain is 49.
Example:
Input: [1,8,6,2,5,4,8,3,7]
Output: 49
2. 题目分析
这是找到两条柱子之间能存储的最大面积的water。
3. 解决思路
使用双指针的方法,一个left指针指向开始,一个right指针指向结尾,求两条柱子之间的面积,然后不断缩小两者的间距,挑选最大的面积,直到left=right,结束遍历。
4. 代码实现(java)
public int maxArea(int[] height) {
int left=0;
int right=height.length-1;
int area=0;
int maxArea=0;
while (right!=left){
if (height[left]>=height[right]){
area=height[right]*(right-left);
maxArea=Math.max(area,maxArea);
right--;
}else{
area=height[left]*(right-left);
maxArea=Math.max(area,maxArea);
left++;
}
}
return maxArea;
}