[leetCode]11. 盛最多水的容器

PythonFCG發表於2020-11-07

題目

連結:https://leetcode-cn.com/problems/container-with-most-water

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

說明:你不能傾斜容器。

在這裡插入圖片描述

輸入:[1,8,6,2,5,4,8,3,7]
輸出:49 
解釋:圖中垂直線代表輸入陣列 [1,8,6,2,5,4,8,3,7]。在此情況下,容器能夠容納水(表示為藍色部分)的最大值為 49。
示例 2:

輸入:height = [1,1]
輸出:1
示例 3:

輸入:height = [4,3,2,1,4]
輸出:16
示例 4:

輸入:height = [1,2,1]
輸出:2
 

提示:

n = height.length
2 <= n <= 3 * 104
0 <= height[i] <= 3 * 104

雙指標

思路: 使用左右指標分別指向容器兩遍的邊界,每次移動高度較小的指標,因為移動高度交大的指標不會是容器的盛水量變大。在指標移動過程中計算容量,儲存最大值。

class Solution {
    public int maxArea(int[] height) {
        int left = 0, right = height.length - 1;
        int max = 0;
        while (left < right) {
            max = Math.max(max, Math.min(height[left], height[right]) * (right - left));
            if (height[left] < height[right]) {
                left++;
                
            } else {
                right--;
            }
        }
        return max;
    }
}

相關文章