解法一:暴力法
class Solution(object): def maxArea(self, height): """ :type height: List[int] :rtype: int """ lst=[] l=len(height) for i in range(l-1): for j in range(i+1,l): min_length=min(height[i],height[j]) width=j-i s=min_length*width lst.append(s) return max(lst) a=Solution() print(a.maxArea([1,1])) print(a.maxArea([4,3,2,1,4])) print(a.maxArea([1,2,1]))
解法二:双指针
思路详解:寻找最大面积所在的两个边界位置
step1:指针1指向数的索引记为i,指针2指向数的索引记为j。最开始指针1指向最左边的数,指针2指向最右边的数。
step2:如果height[0]<height[len(height)-1],则把指针1往右移动一位。因为如果把i=0作为边界,无论j在哪,得到的结果都会比这个面积小。
step3:如果height[0]>height[len(height)-1],则把指针2往左移动一位。因为如果把j=len(height)-1作为边界,无论i在哪,得到的结果都会比这个面积小。
class Solution(object): def maxArea(self, height): """ :type height: List[int] :rtype: int """ lst=[] l=len(height) i=0 j=l-1 while i<=j: lst.append(min(height[i],height[j])*(j-i)) if height[i]<=height[j]: i+=1 else: j-=1 return max(lst)
注意:这里如果给max=0,那么max(lst)会报错!!!