# 左右指標
ans =
0while l < r:
# 左右指標指向同乙個元素的時候退出迴圈
area =
min(height[l]
, height[r])*
(r - l)
# 面積 = 最短擋板 × 間距
ans =
max(ans, area)
# 答案只想要最大的面積
if height[l]
<= height[r]
:# 左擋板 小於 右擋板
l +=
1# 左指標移動
else
: r -=
1# 右指標移動
return ans
(solution(
).maxarea([3
,5,4]))
左右指標正確性:
(1)假設左指標指著height[0]不動;
(2)移動可行性:右指標指著height[-1],此時面積假設為area1。如果右指標移動,指著height[-2],此時面積假設為area2。間距的縮小,使得只有當height[-2]擋板大於之前的,才有可能找到更大的值。
(3)該移動哪乙個指標?:左擋板 小於等於 右擋板,那麼就移動左指標。
11 盛最多水的容器(雙指標)
解法1 二重迴圈,遍歷陣列,列舉出所有容器可能的容積,比較哪乙個容積最大。class solution return max 解法2 雙指標解法,一次遍歷,雙指標一頭一尾開始移動,根據題意,所指向元素小的指標每次移動乙個位置。因為容納的水量是由兩個指標指向的數字中較小值 指標之間的距離決定的。如果我...
11 盛最多水的容器(雙指標法)
container with most water 題目描述 給你 n 個非負整數 a1,a2,an,每個數代表座標中的乙個點 i,ai 在座標內畫 n 條垂直線,垂直線 i 的兩個端點分別為 i,ai 和 i,0 找出其中的兩條線,使得它們與 x 軸共同構成的容器可以容納最多的水。說明 你不能傾斜...
盛最多水的容器(雙指標)
今天在leetcode上刷了一道題用到了雙指標,現在把這種精妙的解法記錄下來 題目傳送門 題目的大意就是要找到乙個最大的min s i s j j i 那麼這時候我是一點思路都沒,然後題解指出了乙個雙指標的做法,我們先討論這個東西的合理性,初始情況,將i,j放到陣列的開始和結尾,此時,我們能拿到乙個...