11. Container With Most Wate

徐奇
2023-12-01

题意是 给一个数组 数组中的每个数代表了一个线段的高度 求两个线段所能乘下的最多的水 本来我以为题目和42. Trapping Rain Water一样 但是后来才发现 线段是不计算宽度的 也就是说 两个线段中间存在一个比这两个线段都高的线段是没有关系的。
可以枚举出所有的可能的组合 求出最大的面积 但是时间复杂度是n*n
还有一种o(n)的方法 就是从最左边和最右边开始遍历 刚刚开始是宽度最大的
然后宽度减少 想要得到更大的面积 必须要提高高度 所以 修改左右两个边界中较低的那个边界。

class Solution {
public:
    int maxArea(vector<int>& height) {
        int l,r;
        l=0;
        r=height.size()-1;
        int maxwater=0;
        int tempwater;
        while(l<r)
        {
            tempwater=min(height[l],height[r])*(r-l);
            if(tempwater>maxwater)
                maxwater=tempwater;
            if(height[l]>height[r])
                r--;
            else
                l++;
        }
        return maxwater;
    }
};
 类似资料: