最大容积 Container With Most Water

2018-07-31 17:28:42

问题描述:

问题求解:

很容易想到的是Brute Force,也就是枚举所有可能的pairs,这种解法的时间复杂度为O(n ^ 2),由于本题的数据规模较大,会TLE。那么就要对算法进行改进了。

这里用到的解法是Two Pointers,左右各设置一个指针,l 和 r。

首先计算最初的面积 curArea = Math.min(height[l], height[r]) * (r - l)。

如果height[l] < height[r],那么可以想见的是将右边线无论如何向左调整,都是无法继续增大面积的,因此此时只能调整左边线,l++。

同理height[l] > height[r],那么只能调整右边线来谋求更好的解,r--。

如果出现了height[l] = height[r],则可任意调整左边或者右边来谋求更好的解。

    public int maxArea(int[] height) {
        int res = 0;
        int l = 0;
        int r = height.length - 1;
        while (l < r) {
            int curArea = Math.min(height[l], height[r]) * (r - l);
            if (curArea > res) res = curArea;
            if (height[l] < height[r]) l++;
            else r--;
        }
        return res;
    }
原文地址:https://www.cnblogs.com/hyserendipity/p/9397238.html