原题链接:https://leetcode.com/problems/container-with-most-water/description/

意思是在坐标系x轴每个整数点画垂直于x轴的线,高度由输入给定,然后计算任意两条线与x轴围成的面积(木桶效应,高度为两条中较低的那条)。

 

我的实现(Two Pointer Approach):

class Solution {
public:
    int maxArea(vector<int>& height) {
        int start = 0;
        int end = height.size() - 1;
        int max = 0;
        while (start < end) {
            int area = (height[start] < height[end] ? height[start] : height[end]) * (end - start);
            if (area > max)
                max = area;
            if (height[start] < height[end])
                start++;
            else
                end--;
        }
        
        return max;
    }
};

操作步骤及原理:先从两个指针指向开始点和结束点,并计算容器面积,然后把高度较低的指针向高度较高指针方向移(因为容器面积由较低位决定,较高位高度无关紧要,如果之后面积可以得到宽度减小的补偿,那也是较低的高度改变了,所以移动较低的那个指针),再计算面积。一直这样下去直到两个指针先后顺序改变从而得到最大容器面积。

 

总结:重点是移动哪个指针,为什么这样做可以?如果不清楚再看看解析https://leetcode.com/problems/container-with-most-water/solution/