[力扣 Hot100]Day5 盛最多水的容器

发布时间:2024年01月15日

题目描述

给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。

找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。

返回容器可以储存的最大水量。

说明:你不能倾斜容器。
示例 1:
在这里插入图片描述

输入:[1,8,6,2,5,4,8,3,7]
输出:49
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
出处

思路

有点贪心的思想,首先左右双指针指向首尾。
在每个状态下,无论长板或短板向中间收窄一格,都会导致水槽底边宽度 ?变短。
若从短板处向内 ,水槽的短板可能变大,因此下个水槽的面积可能增大 。若从长板处向内 ,水槽的短板 不变或变小,因此下个水槽的面积一定变小 。
迭代更新最大值即可。

代码

class Solution {
public:
    int maxArea(vector<int>& height) {
        vector<int>::iterator right = height.end()-1;
        vector<int>::iterator left = height.begin();
        int max = 0, tmp = 0;
        while (left < right){
            if(*left<*right){
                tmp = distance(left, right)*(*left);
                left++;
            }   
            else{
                tmp = distance(left, right)*(*right);
                right--;
            }
            if(tmp>max)
                max = tmp;
        }
        return max;
    }
};
文章来源:https://blog.csdn.net/qq_53627591/article/details/135593466
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。