您的位置:首页 > 大数据 > 人工智能

LeetCode 141 Container With Most Water

2014-11-01 15:16 357 查看
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.

分析,维持两个指针,分别从左右向中间收缩,同时计算装水量,然后更新最大装水量。

可以提高效率的技巧是,

如果收缩过程中,碰到的高度还没有之前的高度高,那么计算出来的装水量一定比之前的小,所以可以直接忽略。

public class Solution {
public int maxArea(int[] height) {
int i, j, lh, rh, area, tmp, len=height.length;

lh=height[0];
rh=height[len-1];
area=0;
i=0;
j=len-1;
while(i<j){
tmp=Math.min(lh,rh)*(j-i);
if(tmp > area)
area = tmp;
if(lh<rh){
while(i<j&&height[i]<=lh)
i++;//高度更小的就不在考虑
if(i<j)
lh=height[i];
}else{
while(i<j&&height[j]<=rh)
j--;
if(i<j)
rh=height[j];
}
}
return area;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息