“Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。”
一、题目描述
- 给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。
二、思路分析
- 首先我们定义一个
变量,用于存储结果,然后可以用双指针进行解题,第一个指针指向首位,第二个指针指向末尾!- 首尾两数
比较,取最小的值,和两下标的差值相乘,将结果赋值给我们定义的变量 - 将
最小的值的下标,向中心移动一位,再次比较首尾,取最小的值,和两下标的差值相乘 结果与变量比较如果新的结果比变量值大,则进行交换,反之继续重复上一步
- 首尾两数
三、AC 代码:
class Solution {
public int maxArea(int[] height) {
//定义三个变量,分别为左右指针和装水容量
int i = 0,j = height.length -1;
int maxarea = 0;
//终止条件,不能有等号,等号是两个指针指向同一个元素,无法装水
while(i < j){
//左右指针中最短的那个为高度
int h = Math.min(height[i],height[j]);
//计算容器的体积,并进行比较更新
maxarea = Math.max(maxarea,(j - i)*h);
//哪端小于或者等于高度移动那端
if(height[i] <= h)i++;
if(height[j]<= h) j--;
}
return maxarea;
}
}
四、总结:
- 好了,代码撸完,我们
总结一下:- 这道题运用了
双指针的解法 - 细节,要注意
while的退出条件,<时退出 尾指针是数组长度减一- 面积是
两个下标相减即可,不需要减一 高度相等的情况需要进行移动下标
- 这道题运用了