leetcode練習1 盛水最多的容器求解過程

2021-10-12 04:56:31 字數 1031 閱讀 1586

題目詳情如下圖所示:

拿到這道題的 第乙個想法就是,雙層迴圈遍曆法,找出所有可能的組合,求出面積,然後比較,最終求出最大的面積。下面是具體的**

class solution

}return max;}}

當然寫完這個方法我們方法這個方法有點挫,他的時間複雜度有點高。是o(n^2)的。

這裡面需要注意的乙個點是書寫雙層迴圈遍歷陣列的寫法問題,對於i和j的取值問題需要注意,因此特地拿出來說。

有沒有更加簡便的方法呢?

當然有我們應該想到:面積等於 長 * 高

當長和高都是最高或者說長和高都是我們這裡的最優解的時候,面積不就是最大了嗎

所以我們設定兩個變數,首先從陣列的首尾兩端來進行查詢。

在首尾兩端時,長度是最大的。那麼這個時候就需要向中間移動去尋找不同的情況

我們如何進行移動呢?

我們看圖可知。求面積時,我們能選取的高度是兩個柱子中最小的那個柱子作為圍成長方形的高。如圖所示

抓住了這一點,我們就能知道:

每次移動兩個柱子中相對較小的那個柱子,小的那個柱子變大了 就會使得總面積變大(因為如果移動較高的哪乙個柱子的話,要麼比較小的大,那麼我們能選取的還是較小的高度,要麼就是比較小的還小,這樣就會使得面積變小,因此我們只能移動最小的柱子才能獲取最大面積)。這就是解這道題的關鍵。

所以這道題的解題思路就是,從兩邊向中間收斂,每次移動相對較小的那個柱子,使得圍成圖形的高度盡可能變大。當收斂到一起即兩個變數相遇時就結束了。(兩個變數會相遇,但是不一定是在中間)

具體的**就是如下所示:

class solution 

return max;}}

全文完!

LeetCode 盛最多水的容器

題目 給定 n 個非負整數 a 1,a2,a n,每個數代表座標中的乙個點 i,ai 畫 n 條垂直線,使得垂直線 i 的兩個端點分別為 i,ai 和 i,0 找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。思路 定義兩個指標,分別指向list的頭和尾,對應容器的左壁和右壁。隨後...

LeetCode 盛最多水的容器

給定 n 個非負整數 a1,a2,an,每個數代表座標中的乙個點 i,ai 在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 i,ai 和 i,0 找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。說明 你不能傾斜容器,且 n 的值至少為 2。圖中垂直線代表輸入陣列 1,8,...

LeetCode 盛最多水的容器

給定 n 個非負整數 a1,a2,an,每個數代表座標中的乙個點 i,ai 在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別 為 i,ai 和 i,0 找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。說明 你不能傾斜容器,且 n 的值至少為 2。示例 輸入 1,8,6,2,5...