11.盛最多水的容器
給你 n 個非負整數 a1,a2,…,an,每個數代表座標中的乙個點 (i, ai) 。在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0)。找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。
說明:你不能傾斜容器,且 n 的值至少為 2
顯然本題是尋找水覆蓋的最大面積=height*width 其中height=min(ai,aj)
兩條直線圍成高度由最短的那條決定
我們選取兩端的直線作為初始狀態,此時width是最大的,假設如圖所示情況
當前柱子是最兩側的柱子,水的寬度 dd 為最大,其他的組合,水的寬度都比這個小。 左邊柱子較短,決定了水的高度為 3。如果移動左邊的柱子,新的水面高度不確定,一定不會超過右邊的柱子高度 7。 如果移動右邊的柱子,新的水面高度一定不會超過左邊的柱子高度 3,也就是不會超過現在的水面高度。由此可見,如果固定左邊的柱子,移動右邊的柱子,那麼水的高度一定不會增加,且寬度一定減少,所以水的面積一定減少。這個時候,左邊的柱子和任意乙個其他柱子的組合,其實都可以排除了。也就是我們可以排除掉左邊的柱子了。
但是這裡的排除是對於移動方式的排除,不能確定接下來有比它大的,中間我們肯定需要乙個max變數來記錄最大值
#include
//包含max,min函式 leetcode上預設有這個標頭檔案可以不寫
class
solution
else
}return max_area;}}
;
初始編完時的小錯誤
開始初始化area,max_area時忘了賦值為零,導致一直無法通過,大家一定要注意賦初始值,否則你的變數初始值的隨機性會干擾你的結果。
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...