http://www.lintcode.com/en/pr...
Container with Most Water
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.
**思路**
对撞指针问题, Volume = Width * Min(left_Height, right_Height). 求最大体积,当缩小宽度时, 则高度必须比原来大。---->两边指针选较小的一个靠近直到比原来的Height大。 # 此程序实现中省略了内层while。
public class Solution {
public int maxArea(int[] height) {
if (height == null || height.length < 2){
return 0;
}
int res = 0;
int left = 0, right = height.length -1;
while (left < right){
int minHeight = Math.min(height[left], height[right]);
res = Math.max(res, minHeight * (right - left));
if (height[left] < height[right]){
left ++;
}
else{
right --;
}
}
return res;
}
}
本文介绍了一种解决“容器盛水”问题的有效算法。通过使用双指针技术,该算法能够在O(n)的时间复杂度内找到能容纳最多水的两个线段。文中详细解释了算法的思路,并给出了具体的Java代码实现。
329

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



