11. Container With Most Wate

来源:互联网 发布:淘宝作图教程 编辑:程序博客网 时间:2024/06/07 03:15

题意是 给一个数组 数组中的每个数代表了一个线段的高度 求两个线段所能乘下的最多的水 本来我以为题目和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;    }};
1 0
原创粉丝点击