描述
给定一个数组height,长度为n,每个数代表坐标轴中的一个点的高度,height[i]是在第i点的高度,请问,从中选2个高度与x轴组成的容器最多能容纳多少水
1.你不能倾斜容器
2.当n小于2时,视为不能形成容器,请返回0
3.数据保证能容纳最多的水不会超过整形范围,即不会超过231-1
解答:
总存水量 = 两个板子之间的最小值 * 两个板子之间的距离
用两个指针,一个指向开头,一个指向结尾,然后我们每次移动一个指针,这时候我们要考虑一个问题,我们要移动哪一个指针,我们看到这个公式,我们可以思考一下,我们每次移动指针,两个板子之间的距离都是会变小,那么我们要是尽可能的想让我们总存水量变大,那么我们就要让我们两个板子之间的最小值变大,我们移动大的那个指针只会让我们的答案不变或者变小,所以我们只有移动小的那个指针才可以达到变化的一个作用
class Solution {
public:
int maxArea(vector<int>& height) {
int len = height.size(), l = 0, r = len - 1, maxx = 0;
// 获取数组长度,左右指针分别指向开头和结尾,把最大值初始为0
while(l < r) {
// 执行循环
maxx = max(maxx, min(height[l], height[r]) * (r - l));
// 每次对最大值进行一个更新
height[l] < height[r] ? l += 1 : r -= 1;
// 每次我们把数组值小的那边的指针移动
}
return maxx;
}
};