LeetCode-11.盛最多水的容器

題目

給定 n 個非負整數 a1,a2,…,an,每個數代表座標中的一個點 (i, ai) 。在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別爲 (i, ai) 和 (i, 0)。找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。

說明:你不能傾斜容器,且 n 的值至少爲 2。

題目
解題思路—雙指針:兩條線與x軸形成的長方形面積,長即爲兩條線在x軸間的距離,寬即爲兩條線中最短的那條。想要形成的面積最大,兩條線間的距離越長越好,最短的那條線越高越好。所以,可以設置雙指針,分別從頭尾開始向內遍歷。如何確定是移動指針left還是right呢?需要比較一下left和right的長度,移動較短的那一根。這雖然會縮小矩形的長,但是有可能會增加矩形的寬。(如果移動較長的那一根,長寬都會減小。)

Java解題—雙指針

class Solution {
    public int maxArea(int[] height) {
        int left = 0, right = height.length-1;
        int max = 0;
        while(left<right){
            int area = 0;
            if(height[left]>height[right]){
                area = (right-left)*height[right];
                right--;
            }else{
                area = (right-left)*height[left];
                left++;
            }
            max = max<area?area:max;
        }
        return max;
    }
}
發佈了170 篇原創文章 · 獲贊 86 · 訪問量 20萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章