示例解題思路
給定 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。接下來...