题目描述
思路
使用双指针的做法解决:公式(两个指针指向的数字中较小值∗指针之间的距离)
- 首先将左右指针分别指向数组的左右两边,使用公式计算当前值
- 计算出来后,
需要将数字较小的那个指针移动
(左指针右移,右指针左移),再进行计算 - 通过第一步和第二步计算最大值,保存到一个变量里面,循环便可以得到最大的容量
- 为什么这样就可以了?不需要切换其他的方法?
代码
class Solution {
public int maxArea(int[] height) {
//左右指针的定义:最小和最大
int left = 0,right = height.length-1;
//初始化返回值(目标值)
int ans = 0;
//循环求值过程,得到最大值
//直到最左边和最右边的指针重合才能离开循环
while(left < right){
//通过公式计算当前情况最大可以存储的容量
int area = Math.min(height[left],height[right]) * (right - left);
//更新目标值
ans = Math.max(ans,area);
//比较左右指针谁大谁小:左指针小就加1,右指针小就减1
if(height[left] <= height[right]){
++left;
}else{
--right;
}
}
return ans;
}
}
代码说明
看注释。。。