Leetcode刷題 11 盛最多水的容器

2021-09-11 17:46:58 字數 1402 閱讀 5513

示例解題思路

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

說明:你不能傾斜容器,且 n 的值至少為 2。

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

輸出: 49

演算法:遍歷所有可能的面積,找出最大的面積

優點:簡單容易想

缺點:太暴力,太佔記憶體

時間空間複雜度:

時間複雜度:o(n^2)

空間複雜度:o(1),使用恆定的額外空間。

//class solution:

def maxarea

(self, height: list[int])-

> int:

max_value=

0for i in

range

(len

(height)):

for j in

range

(i+1

,len

(height)):

ifmin

(height[i]

,height[j])*

abs(i-j)

>max_value:

max_value=

min(height[i]

,height[j])*

abs(i-j)

return max_value

演算法:定義左右兩個指標,分別在最左端和最右端,移動指標會造成寬度降低,所以指標向數值大的方向移動

時間空間複雜度:

時間複雜度:o(n)

空間複雜度:o(1),使用恆定的額外空間。

//class solution:

def maxarea

(self, height: list[int])-

> int:

max_value=

0 l=

0 r=

len(height)-1

while lmax_value=

max(

(r-l)

*min

(height[l]

,height[r]

),max_value)

if(height[l]

l+=1else

: r-=

1return max_value

leetcode刷題之旅 11 盛最多水的容器

題目鏈結 根據圖示可以看出,容積取決於兩個條件,一是容器兩邊中最小邊的長度,二是容器兩邊的距離,即底和高。因此我們需要計算的就是這兩個資料。因此在程式中我們需要設定的變數有 根據題目含義,我們需要寫出兩重迴圈,遍歷每一種可能的情況。public intmaxarea int height retur...

LeetCode演算法題11 盛最多水的容器解析

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

LeetCode 11 題 盛水最多的容器

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