题目
给定一个长度为 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
提示:
n == height.length
2 <= n <= 105
0 <= height[i] <= 104
我的题解
题解:双指针
左右两面开弓,不断向中间收紧,因为向中间,水池底边长度减少,所以必须原来两个墙壁中低的那个要比之前高才有可能蓄的水更多(因为需水量由两个墙壁中较低的那个决定)
所以不断中间方向移动较矮的那个墙,判断当两个墙都不低于原来的时候才有可能蓄水更多,进行判断。持续这个过程直到两个墙相遇。
class Solution {
public:
int maxArea(vector<int>& height) {
int left_idx=0, right_idx=height.size()-1;
int max_val=0, max_left=0, max_right=0;
while(left_idx!=right_idx){
if(height[left_idx]>=max_left && height[right_idx]>=max_right){
max_val = max(max_val,(right_idx-left_idx)*min(height[left_idx],height[right_idx]));
max_left = height[left_idx];
max_right = height[right_idx];
}
height[left_idx]<height[right_idx]?left_idx++:right_idx--;
}
return max_val;
}
};
完成时间
2024-02-14:用时: 13 m 45 s