盛最多水的容器

2021-09-12 23:43:48 字數 1106 閱讀 3986

題目:

本題可以固定思維是設定兩個做兩個for迴圈,還有一種是貪心演算法:設定左右兩個指標left 和 right,盛水容量由矮的高度決定,所以我們每次移動矮的高度。

貪心法的基本思路:

從問題的某乙個初始解出發逐步逼近給定的目標,以盡可能快的地求得更好的解。當達到某演算法中的某一步不能再繼續前進時,演算法停止。

該演算法存在問題:

不能保證求得的最後解是最佳的;

不能用來求最大或最小解問題;

只能求滿足某些約束條件的可行解的範圍。

實現該演算法的過程:

從問題的某一初始解出發;

while 能朝給定總目標前進一步 do

求出可行解的乙個解元素;

由所有解元素組合成問題的乙個可行解;

class

solution

(object):

defmaxarea

(self, height)

:"""

:type height: list[int]

:rtype: int

"""l =

0 r =

len(height)-1

ifnot height or

len(height)==1

:return

0 res =

(r-l)

*(height[l]

if height[l]

< height[r]

else height[r]

)while l < r:

if height[l]

< height[r]

: res = res if res > height[l]

*(r-l)

else height[l]

*(r-l)

l +=

1else

: res = res if res > height[r]

*(r-l)

else height[r]

*(r-l)

r -=

1return res

盛最多水的容器

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

盛最多水的容器

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

盛最多水的容器

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