在做题中学习(39):盛最多水的容器

发布时间:2023年12月23日

11. 盛最多水的容器 - 力扣(LeetCode)

解释:因为木桶原理,能否盛最多的水是由最短的一块板决定的,所以容纳水的公式为:v= 两个数下标之差 * 短板高度。

思路:最优解法(双指针法)

从这张图可以看出:4和6组完后便不必再和2,5组了,因为向内组合只有两种可能,w在减小,要么不变要么减小。所以就可以把4干掉,留下的6再和剩下的数组合,此时虽然w一定减小,但短板可能会经过更新而增大。

所以可以看出每组一次数,就可以舍去一个数,直到left和right相遇,总共有right-left次计算出的体积,在这些体积中选最大值就是最后的结果。

class Solution 
{
public:
    int maxArea(vector<int>& height) 
    {
        int left = 0, right = height.size()-1;
        int max=0;
        while(left!=right)
        {
            if(height[left]<height[right])
            {
                int v = height[left]*(right-left);
                if(v > max)
                {
                    max = v;
                }
                left++;
            }
            else
            {
                int v = height[right]*(right-left);
                if(v>max)
                {
                    max = v;
                }
                right--;
            }
        } 
        return max;
    }
};

文章来源:https://blog.csdn.net/yiren_liusong/article/details/135166923
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。