1. 程式人生 > 實用技巧 >LeetCode_11_盛水最多的容器

LeetCode_11_盛水最多的容器

題目

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

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

示例:

輸入:[1,8,6,2,5,4,8,3,7]
輸出:49

思路

雙指標

i 指向開始,j 指向結尾下標。每次計算當前兩個高度可裝的最大體積,與全域性最大體積進行比較。

 1 public int maxArea(int[] height) {
 2         int max = Integer.MIN_VALUE;
3 4 int i=0; 5 int j=height.length-1; 6 7 while (i<j) { 8 9 int tempMin = Math.min(height[i], height[j]); 10 max = Math.max(max, tempMin * (j-i)); 11 if(height[i] < height[j]) i++; 12 else
j--; 13 } 14 15 16 17 return max; 18 }