1. 程式人生 > 其它 >菜雞的力扣集合(會更新)

菜雞的力扣集合(會更新)

入坑力扣,希望可以經常練一練,然後記錄一下,更新。

leetcode-cn.com/problems/container-with-most-water

第一次使用了暴力O(n^2)的方法,直接超出限制,後來改為O(n)。

Python

class Solution:
    def maxArea(self, height: List[int]) -> int:
        current_max_area = 0
        left = 0
        right = len(height)-1
        while right>left:
            area 
= (right-left)*min(height[left], height[right]) if area > current_max_area: current_max_area = area if height[left] > height[right]: right -= 1 else: left += 1 return current_max_area

C

int maxArea(int
* height, int heightSize){ int current_max_area = 0; int area; int left = 0; int right = heightSize-1; while (right > left){ if (height[left] > height[right]){ area = (right-left)*height[right]; right -= 1; }else{ area = (right-left)*height[left]; left
+= 1; } if (area > current_max_area){ current_max_area = area; } } return current_max_area; }

大佬ChengMing評論:這裡用到了動態規劃,基本的表示式: area = min(height[i], height[j]) * (j - i),使用兩個指標,值小的指標向內移動,這樣就減小了搜尋空間。因為面積取決於指標的距離與值小的值乘積,如果值大的值向內移動,距離一定減小,而求面積的另外一個乘數一定小於等於值小的值,因此面積一定減小,而我們要求最大的面積,因此值大的指標不動,而值小的指標向內移動遍歷。