我觉得这道题可以用对撞指针的思想来完成
执行用时:4 ms, 在所有 Java 提交中击败了67.70% 的用户
内存消耗:39.5 MB, 在所有 Java 提交中击败了7.80% 的用户
传送门
https://leetcode-cn.com/problems/container-with-most-water/
这道题呢,我的主要思路是这样的,对撞指针嘛,我们肯定要先定义两个变量left和right来指向数组的开始与结尾,然后在定义一常量res来表示存储水的面积,然后左指针与右指针开始碰撞,想取res最大,那么两边的高肯定是最高的。
public class LeetCode11 {
public int maxArea(int[] height) {
//左指针为0这个位置
int left =0;
//右指针为数组的最右边
int right = height.length -1;
//表示储存水的面积
int res = 0;
//循环,当left与right不相等的时候
while (left < right){
//res取面积最大,当前面积为底*小的那个高
res = Math.max(res , (right - left)*Math.min(height[left],height[right]));
//如果height[left]< height[right]说明左边矮,要想装更多水就要向右移
if (height[left]<height[right]){
left ++;
}else
right--;
}
return res;
}
}