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.
解:题目的意思即是找最大面积的长方形。其坐标肯定在最左到最右的某两个坐标。先取最左和最右作为最优解,一步步移动从而得出最优解。而移动的过程中,长方形的长随之减小,要想成为最优解长方形的高必须增加,也就是说移动的规则就是替换左右两边高度较低的那条边,一步步寻找最优解。
public class Solution {
public int maxArea(int[] height) {
int maxArea = 0;
int left = 0,right = height.length - 1;
while (left<right){
maxArea = Math.max(maxArea,(right - left)*((int)Math.min(height[left],height[right])));
if (height[left] < height[right]) left++;
else right--;
}
return maxArea;
}
}