文章目录
- 一、题目
- 1、题目描述
- 2、基础框架
- 3、原题链接
- 二、解题报告
- 1、思路分析
- 2、时间复杂度
- 3、代码详解
- 三、本题小知识
一、题目
1、题目描述
给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
2、基础框架
- C++版本给出的基础框架如下:
3、原题链接
https://leetcode.cn/problems/container-with-most-water/
二、解题报告
1、思路分析
(
1
)
(1)
(1)以两指针所在位置的垂线高度作为桶的边缘。考虑指针如何移动,可以知道的是,两指针所指的垂线高度低的移动,桶的面积才可能增大,移动高的只可能变小或不变。
(
2
)
(2)
(2)所以,每次移动垂线高度比较低的指针,直到两指针相遇。
2、时间复杂度
时间复杂度为O(n)
3、代码详解
class Solution {
public:
int maxArea(vector<int>& height) {
int re = 0;
int temp = 0;
int l = 0;
int r = height.size() - 1;
while (l < r) {
temp = (r - l) * min(height[l], height[r]);
re = max(re, temp);
if (height[l] < height[r]) {
l++;
} else {
r--;
}
}
return re;
}
};