Skip to content

Latest commit

 

History

History
28 lines (20 loc) · 1.34 KB

11. Container With Most Water.md

File metadata and controls

28 lines (20 loc) · 1.34 KB
class Solution:
    def maxArea(self, height: List[int]) -> int:
        res=0
        i,j=0,len(height)-1
        while i<j:
            k=(j-i)*min(height[j],height[i])
            if k>res:res=k
            if height[j]<height[i]:j-=1
            else:i+=1
        return (res)

leetcode1_11

思路總結:由圖片中可以看出,除了高度外,隨著寬度減少其蓄水量可能也會降低,必須在高度(height)與寬度(width)中兼顧找出最大的蓄水量。

第一步,我們分別取出Array的頭跟尾,計算出此時的蓄水量,並暫存之,此時寬度會是最大的。

第二步,我們比較頭尾的高度,找出其中高度比較低的一方,使之往Array內縮一格,成為新的頭或尾,此時寬度會減少一格。 會讓高度比較低的一方內縮,是為了確保我們在減少一個寬度的情況,可以使得高度能有所增長,以達到蓄水量增加的可能。

我們重複以上兩個步驟,直到頭與尾碰在一起。

有可能兩個相鄰的高度極端的高,即便寬度只有1,蓄水量還是最大。同樣也有可能頭尾高度都只有1,但Array寬度極大,使得它們的蓄水量最高。

主要考解題邏輯(智商),陣列的前後比較,有些快速排序法(Quicksort)的影子。