4.最大容器问题

1.问题描述

2.分析问题

如何从下面选出两个竖线,这样组合出来的容器能装的液体最多。直观考虑就是把所有的组合可能能遍历一遍,不过这样的时间复杂度就比较高,为O(n^2).仔细考虑可以发现,如果两边往中间靠拢,假如当前处在左i与右j的位置,那么如果挪动一下的话,只能是较小的一边往内缩才有机会变成最大容器(可以琢磨一下,如果大的一边还往里缩,那么下一个容器的高肯定小于等于上一个小边,而且长度变小了,必然导致容量减少)。

3.代码

    int maxArea(vector<int> &height) 
    {
        int right=height.size()-1;
        int left=0;
        int result=0;
        while(left<right)
        {
            result=max(result,(right-left)*min(height[left],height[right]));
            if(height[left]<height[right]) {left++;}
            else {right--;}
        }
        return result;
        
    }

猜你喜欢

转载自blog.csdn.net/feng__shuai/article/details/80973611