力扣——盛最多水的容器点击即可跳转
当我们选择1号线和8号线时,下标为 1 和 8 形成容器的容积的高度是由 较矮的决定的,即下标为 8 的位置;
而宽度则是 1到8 之间的距离,为 8-1=7,此时容器的容积为 7 * 7 = 49。
当我们选择1号线和6号线时,高度为 8,宽度为 5,此时容积为 40,这个情况没有示例一多,所以示例一就是容积最大的情况。
我们先不看那么多数,从简单的开始分析,例如,分析中间的 6到4,即数组为 [6,2,5,4].
我们先选择6和4来计算容积,再选择其中较小的数来进行枚举,即以 4 来进行枚举,无论4跟谁一起容积都变小,所以4就不需要考虑了。
我们将这个规律用到整个数组中,利用双指针,在它们两个相遇前,计算出 V1,V2,V3……,再求出最大值。
代码如下
class Solution {public int maxArea(int[] height) {int left = 0;int right = height.length - 1;int volume = 0;while(left < right){int v = Math.min(height[left],height[right]) * (right - left);//求的是V1,V2……volume = Math.max(v,volume);//将最大值放到里面if(height[left] < height[right]){//谁小谁换left++;}else{right--;}}return volume;}
}
点个赞吧,谢谢你