创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
更多算法知识专栏:算法分析🔥
给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ
LeetCode题解专栏:【LeetCode刷题笔记】
题目链接
一、题目描述
给定一个长度为 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。
示例 2:
输入:height = [1,1]
输出:1
三、题目分析
使用双指针的思想,一个指针在左,一个指针在右;
记录最大面积值,通过指针移动计算出每个位置能盛最多水的值
由于最大面积取决于较短的边,所以每次移动时进行比较,移动较小的那条边
四、代码实现(C++)
#include <algorithm>
class Solution {
public:
int maxArea(vector<int>& height) {
//记录面积最大值
int res = 0;
//左指针
int front = 0;
//右指针
int back = height.size()-1;
//遍历
while(front < back)
{
//矩形大小 短线*下标差
int cur = min(height[front],height[back])*(back-front);
res = max(res,cur);
//如果左侧矩形更高 移动右侧向左
if(height[front] > height[back])
{
back--;
}
else
{
front++;
}
}
return res;
}
};
大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。 |
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容! |
如果本文哪里有错误的地方还请大家多多指出(●'◡'●) |