[leetcode] Container with most water

来源:互联网 发布:细雪哪个译本好 知乎 编辑:程序博客网 时间:2024/06/08 15:10

Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) 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;    }}


0 0
原创粉丝点击