LeetCode-11. 盛最多水的容器-刷題思路分享

給定 n 個非負整數 a1a2,...,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
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容