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;
}
}
本文介绍了一个经典的算法问题:寻找两个线段,与x轴形成的最大容器。通过从两端向中间遍历的方式,实现O(n)的时间复杂度。文章提供了一个Java实现的例子。
185

被折叠的 条评论
为什么被折叠?



