1. 程式人生 > >[LeetCode]盛最多水的容器(Container With Most Water)

[LeetCode]盛最多水的容器(Container With Most Water)

題目描述

給定 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)