《LeetCode之每日一题》:68.盛最多水的容器
Posted 是七喜呀!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《LeetCode之每日一题》:68.盛最多水的容器相关的知识,希望对你有一定的参考价值。
题目链接: 盛最多水的容器
有关题目
给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。
在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
说明:你不能倾斜容器。
示例 2:
输入:height = [1,1]
输出:1
示例 3:
输入:height = [4,3,2,1,4]
输出:16
示例 4:
输入:height = [1,2,1]
输出:2
提示:
n = height.length
2 <= n <= 3 * 10^4
0 <= height[i] <= 3 * 10^4
题解
法一:循环遍历
class Solution {
public:
int maxArea(vector<int>& height) {
int volMax = 0;
int n = height.size();
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
int h = min(height[i],height[j]);
int len = j - i;
int tmp = h * len;
volMax = max(volMax,tmp);
}
}
return volMax;
}
};
法二:双指针
思路:
两个指针指向的数字中较小值∗指针之间的距离
找出较小值后向左or右移动对应指针
class Solution {
public:
int maxArea(vector<int>& height) {
int l = 0, r = height.size() - 1;//定义左右指针
int volMax = 0;//存放最大值
while(l < r)
{
int tmp = min(height[l],height[r]) * (r - l);
volMax = max(volMax,tmp);
if (height[l] > height[r])
r--;
else
l++;
}
return volMax;
}
};
以上是关于《LeetCode之每日一题》:68.盛最多水的容器的主要内容,如果未能解决你的问题,请参考以下文章
每日算法/刷穿 LeetCode11. 盛最多水的容器(中等)