菜雞的力扣集合(會更新)
阿新 • • 發佈:2021-09-03
入坑力扣,希望可以經常練一練,然後記錄一下,更新。
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),使用兩個指標,值小的指標向內移動,這樣就減小了搜尋空間。因為面積取決於指標的距離與值小的值乘積,如果值大的值向內移動,距離一定減小,而求面積的另外一個乘數一定小於等於值小的值,因此面積一定減小,而我們要求最大的面積,因此值大的指標不動,而值小的指標向內移動遍歷。