力扣——盛最多水的容器點擊即可跳轉
當我們選擇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;}
}
點個贊吧,謝謝你