給定 n 個非負整數 a1,a2,...,an,每個數代表坐標中的一個點 (i, ai) 。在坐標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)。找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。
說明:你不能傾斜容器,且 n 的值至少為 2。
image
圖中垂直線代表輸入數組 [1,8,6,2,5,4,8,3,7]。在此情況下,容器能夠容納水(表示為藍色部分)的最大值為 49。
示例:
輸入: [1,8,6,2,5,4,8,3,7]
輸出: 49
首先是最簡單粗暴的思路:2個 for 循環暴力求解,
復雜度分析:
時間復雜度:O(n^2),遍歷所有高度組合的面積。
空間復雜度:O(1),使用恒定的額外空間。
第一次超時了
整理一下思路,其實我們沒必要全部循環一遍,考錄到面積取決于短邊,如果左指針是短邊,l就是左指針,并向右移,如果右指針是短邊,就移動 r左移動。并不斷維護最大值。掃一遍就夠。
時間復雜度:o(n)
空間復雜度:O(1),使用恒定的額外空間。
image.png