給你 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...