lintcode-383-装最多水的容器

383-装最多水的容器

给定 n 个非负整数 a1, a2, ..., an, 每个数代表了坐标中的一个点 (i, ai)。画 n 条垂直线,使得 i 垂直线的两个端点分别为(i, ai)和(i, 0)。找到两条线,使得其与 x 轴共同构成一个容器,以容纳最多水。

注意事项

容器不可倾斜。

样例

给出[1,3,2], 最大的储水面积是2.

标签

两根指针 数组

思路

从左右两边向中间逼近,若要使面积增大,则必须找到更大的容器高度(因为容器长度在变短),所以保留长的那条线段,使得短线段向另一方逐渐逼近

code

class Solution {
public:
    /*
     * @param : a vector of integers
     * @return: an integer
     */
    int maxArea(vector<int> heights) {
        // write your code here
        int size = heights.size();
        if (size <= 0) {
            return 0;
        }

        int result = 0, left = 0, right = size-1;
        while (left < right) {
            result = max(result, min(heights[left], heights[right])*(right - left));
            if (heights[left] < heights[right]) {
                left++;
            }
            else {
                right--;
            }
        }
        return result;
    }
};
原文地址:https://www.cnblogs.com/libaoquan/p/7325473.html