盛水最大的容器

2021-10-22 19:40:52 字數 980 閱讀 4185

給你 n 個非負整數 a1,a2,...,an,每個數代表座標中的乙個點 (i, ai) 。在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 (i, ai) 和 (i, 0) 。找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。

說明:你不能傾斜容器。

示例 1:

輸入:[1,8,6,2,5,4,8,3,7]

輸出:49 

解釋:圖中垂直線代表輸入陣列 [1,8,6,2,5,4,8,3,7]。在此情況下,容器能夠容納水(表示為藍色部分)的最大值為 49。

示例 2:

輸入:height = [1,1]

輸出:1

示例 3:

輸入:height = [4,3,2,1,4]

輸出:16

示例 4:

輸入:height = [1,2,1]

輸出:2

n = height.length

2 <= n <= 3 * 104

0 <= height[i] <= 3 * 104

def maxarea(height):

maxval = 0

leng = len(height)

j = leng - 1

i = 0

while i < j:

tempheight = min(height[i], height[j])

tempval = (j-i) * tempheight

maxval = max(maxval, tempval)

if height[i] <= height[j]:

i += 1

else:

j -= 1

return maxval

每次移動左右兩個邊界裡面較小的那一邊,因為最開始橫軸上的距離是最大的,當移動時,橫向變短是無可避免的,只能在縱向找到乙個相對較大的。

容器盛水問題

給定乙個直方圖 也稱柱狀圖 假設有人從上面源源不斷地倒水,最後直方圖能存多少水量?直方圖的寬度為 1。上面是由陣列 0,1,0,2,1,0,1,3,2,1,2,1 表示的直方圖,在這種情況下,可以接 6 個單位的水 藍色部分表示水 感謝 marcos 貢獻此圖。示例 輸入 0,1,0,2,1,0,1...

容器盛水問題

先是說一說對這道題的理解吧,常規的容器的容量是由最短的邊決定的,所以應該取左右兩邊的最短邊減去底高就是容量,所以理想狀態是將陣列遍歷一次,知道每乙個低是否有容量,例如l與r是容器的兩邊,且l比r小,故l決定了容量,設x為容器底,則l x,會出現兩種情況,一是整數,則可以知道容量是多少 二是負數,即這...

盛最多水的容器

給定 n 個非負整數 a1,a2,an,每個數代表座標中的乙個點 i,ai 畫 n 條垂直線,使得垂直線 i 的兩個端點分別為 i,ai 和 i,0 找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。注意 你不能傾斜容器,n 至少是2。乍一看很簡單,巢狀迴圈遍歷就完事了 int m...