一、算法概述
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.
二、分析
存在n条线段,线段的长度为height[i],任选两条线段与x轴组成容器,求容器的最大面积。初始化两个索引I和j,i指向数组的首端,j指向数组的尾端,当height[i]<height[j]时,i++;反之,j++.该算法的主要思想是,如果height[i]<height[j],说明导致面积不够大的原因在于height[i],因此通过移动I来寻求一个更大的height[j];如果height[i]>=height[j],同理。算法复杂度为O(n).
三、java 代码
public class Solution {
public int maxArea(int[] height) {
/*
int maxarea=0;
int tempArea=0;
for(int i=0;i<height.length-1;i++){
if(height[i]==0)
continue;
int minj=maxarea/height[i]+i;
for(int j=height.length-1;j>i&&j>=minj;j--){
tempArea=java.lang.Math.min(height[i],height[j])*(j-i);
if(maxarea<tempArea)
maxarea=tempArea;
}
}
return maxarea;
*/
int maxArea=0;
int i=0;
int j=height.length-1;
while(i<j){
int area=java.lang.Math.min(height[i],height[j])*(j-i);
if(maxArea<area)
maxArea=area;
if(height[i]<height[j])
i++;
else
j--;
}
return maxArea;
}
}