1. 程式人生 > >LeetCode第11題 盛水最多的容器

LeetCode第11題 盛水最多的容器

max col 移動 ger 最大值 turn 個數 容量 height

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

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

思路: 類似於木桶效應.
   每次移動較短的線,保持長線不動.(如果短線不動而長線動,容量減小(y沒有增大反而x變小))
    記錄最大值.

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

LeetCode第11題 盛水最多的容器