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.
大致意思就是从给定数组中取出任意两个数,作垂直于X轴的直线和X轴组成一个容器,求这个容器装满水最大的可能值。
解法一:直接采用遍历的方法,时间复杂度O(n2),提交上去超时
解法二:从两边往中间遍历,总是移动较小的那个边,时间复杂度O(n)。代码如下:
public class Solution {
public int maxArea(int[] height) {
int left=0,right=height.length-1;
int max=0,w,h,index;
while(left<right){
w=right-left;
h=height[left]>height[right]?height[right]:height[left];
if(max<(w*h))
max=w*h;
if(height[left]<height[right]){
index=left;
index++;
while (index<right && height[left]>=height[index])
index++;
left=index;
}else {
index=right;
index--;
while (index>left && height[right]>=height[index] )
index--;
right=index;
}
}
return max;
}
}
leetcode -eleven:Container With Most Water
原文:http://my.oschina.net/endeavour/blog/490950