[LeetCode]盛最多水的容器(Container With Most Water)
阿新 • • 發佈:2018-12-10
題目描述
給定 n 個非負整數 a1,a2,...,an,每個數代表座標中的一個點 (i, ai) 。畫 n 條垂直線,使得垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)。找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。
解決方法
從頭和尾開始找起,一開始就獲得了最大寬度,由於面積是取較小的高度,所以移動高度較小的索引以期待能獲得更高的高度。
public int maxArea(int[] height) { int l = 0, r = height.length - 1, max = 0; while (l < r) { max = Math.max(max, (r - l) * Math.min(height[l], height[r])); if (height[l] < height[r]) l++; else r--; } return max; }
時間複雜度:O(n)空間複雜度:O(1)