欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 力扣11. 盛最多水的容器

力扣11. 盛最多水的容器

2025/2/9 23:57:49 来源:https://blog.csdn.net/q38491/article/details/145450825  浏览:    关键词:力扣11. 盛最多水的容器

今天我们来学习力扣的一道经典题目: 盛最多水的容器问题

在这里插入图片描述

在这里插入图片描述

力扣11. 盛最多水的容器

解题思路:

题目给了相关的示例,让我们来细细分析一下

在这里插入图片描述
由题意可知,我们要从头到尾寻找合适的两个板子(元素),使得所围成的面积最大。

由木桶效应可知,木桶里的水取决于最短的那一条板子。

而所求的面积正是宽度乘以两条板子中最短的一条所以,问题的关键在于找出最短的那条板子和中间的宽度。

解题步骤:

在这里我们采用双指针的办法,固定一端,向中间移动另一端。

在这里插入图片描述

可是是怎么个移法呢?

我们知道,这道题中的面积是高度乘以宽度表示的,当两侧板子中的短边固定时,向中间移动长边,所得的面积是在不断的减小。
因为向中间走,宽度一定是在减小的,而高度却取决于短的那一边,所以,面积一定是在减小的。
这样的话,我们就能减少许多麻烦的列举,从而精简代码。

解题代码:

class Solution {
public:int maxArea(vector<int>& height) {//先定义两个指针,分别指向最两端int left=0,right=height.size()-1;//定义面积sum=0,v=0;//当两个指针重合前,进行操作while(left<right){//面积是由最短的那一条边的高度乘以宽度v=min(height[right],height[left])*(right-left);//每次更新,存储最大值sum=max(sum,v);//放弃短的那一条边,从而向里面寻找最优解if(height[left]<height[right]) left++;else           right--;}return sum;}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com