LeetCode 11. 盛最多水的容器
Posted 咸鱼の小窝
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 11. 盛最多水的容器相关的知识,希望对你有一定的参考价值。
题意
给出(n)个垂直线段,相邻两线段之间的距离是(1),选出一个区间,使得区间两端线段中较短的那根长度乘区间长度最大。
思路
想法1:枚举没对线段作为区间端点的情况。时间复杂度(O(n^2)),太暴力。
想法2:双指针法。
思想依据:因为两段之间形成的区域总会受到其中较短的那条长度的限制,此外,两线段距离越远,得到的面积越大。
具体做法:在线段长度构成的数组中使用两个指针,分别指向开始和末尾,每一步都计算出指针所指向的线段形成的区域的最大值,用一个变量来保存更新最大值。指针向较长的那端移动。
代码
class Solution {
public:
int maxArea(vector<int>& height) {
int res = 0, l = 0, r = height.size() - 1;
while(l < r)
{
res = max(res, min(height[l], height[r]) * (r - l));
if(height[l] < height[r])
++l;
else
--r;
}
return res;
}
};
总结
女少口阝可!
以上是关于LeetCode 11. 盛最多水的容器的主要内容,如果未能解决你的问题,请参考以下文章
算法leetcode|11. 盛最多水的容器(rust重拳出击)