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

[leetcode] Container with most water

2015-02-11 06:22 337 查看
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.

思路:这道题的tag是two pointer。很明显,是要我们利用左右两个pointer,来寻找最优解。如果要存的水最多,我们需要宽和高都很大,最左指针和最右指针保证宽最大,但是高不一定是最大,左右两个指针,分别向中间遍历,如果遇到更低的数值则跳过,因为这种情况,水会更少(高和宽都降低了),如果遇到了更大的值,则保存下来,计算存水量。

public class Solution {
public int maxArea(int[] height) {
int l = 0;
int r = height.length - 1;
int result = 0;
while(l < r){
result = Math.max(result, Math.min(height[l], height[r]) * (r - l));
int k;
if(height[l] < height[r]){
k = l;
while(k < r && height[k] <= height[l]){
k++;
}
l = k;
}
else{
k = r;
while(k > l && height[k] <= height[r]){
k--;
}
r = k;
}
}
return result;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode 指针 遍历