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.
一开始从左到右遍历,结果时间不够。
后来看网上的答案,发现时间复杂度可以是O(n)。从两边开始遍历。当前的容积为w*min(hl,hr), 以其他所有高度不超过min(hl,hr)的边的容器的容积不会超过当前值,因为底边的长度变短了。
public class Solution {
public int maxArea(int[] height) {
int max=0,left=0,right=height.length-1;
while(left<right){
int min=Math.min(height[left],height[right]);
max=Math.max(max,(right-left)*min);
while(height[left]<=min&&left<right){
left++;
}
while(height[right]<=min&&left<right)
right--;
}
return max;
}
}