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.
看了nandawys的评论,找到了O(n)方法,思路是从两头到中间扫描,设i,j分别指向height数组的首尾。
那么当前的area是min(height[i],height[j])
* (j-i)。
当height[i] <
height[j]的时候,我们把i往后移,否则把j往前移,直到两者相遇。
public int maxArea(int[] height) { int start = 0; int end = height.length - 1; int max = 0; while(start < end){ int container = Math.min(height[start], height[end]) * (end - start); if(max < container){ max = container; } if(height[start] > height[end]){ end --; } else { start ++; } } return max; }
原文:http://www.cnblogs.com/RazerLu/p/3552511.html