Python-Leecode-011-盛最多水的容器

題目: 

                               

解法一:組合所有可能,找出最大(超出時間限制)

class Solution:
    def maxArea(self, height: List[int]) -> int:
        max_= 0
        for i in range(0,len(height)):
            for j in range(i+1,len(height)):
                flag = min(height[i],height[j]) * abs(i-j)
                if flag > max_:
                    max_ = flag
        return max_

解法二:雙指針法(132ms,14.6MB)

解釋:距離越遠的越好,並且兩塊板之間短板決定大小。從兩端開始滑動,直到兩端相遇(體現雙指針),因爲由短板決定,因此每次滑動方向由短端決定。

class Solution:
    def maxArea(self, height: List[int]) -> int:
        max_= 0
        i = 0
        j = len(height)-1
        while(i!=j):
            if height[i] < height[j]:
                flag = height[i] *(j-i)
                i +=1
            else:
                flag = height[j] *(j-i)
                j -=1
            if flag > max_:
                max_ = flag
        return max_

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章