leetcode 每日一题 11. 盛最多水的容器
1.暴力法
思路:
找出每个子区间,计算出面积,找出最大值
代码:
class Solution: def maxArea(self, height: List[int]) -> int: areamax = 0 for i in range(len(height)): for k in range(i+1,len(height)): area = min(height[i],height[k])*(k-i) if area > areamax: areamax = area return areamax
2.双指针法
思路:
设置双指针i,j分别位于容器壁两端,根据规则移动指针,并且更新面积最大值,直到i==j时返回面积最大值。由于面积大小由两侧中的较小值确定,并且此时区间长度已经是以较小值为边所能达到的最大区间,所以此较小值所构成的面积已经是最大的,故将较小值的指针向内移动。
例如:
[1,8,6,2,5,4,8,3,7]
代码:
class Solution: def maxArea(self, height: List[int]) -> int: l, r = 0, len(height) - 1 ans = 0 while 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