双指针法:
class Solution: def maxArea(self, height) -> int: if len(height)<=1: return 0 #双指针法 i,j,S=0,len(height)-1,0 while i<j: if height[i]<height[j]: S=max(S,height[i]*(j-i)) i+=1 else: S=max(S,height[j]*(j-i)) j-=1 return S
执行用时 :148 ms, 在所有 Python3 提交中击败了82.08%的用户
内存消耗 :15.5 MB, 在所有 Python3 提交中击败了5.18%的用户
——2019.10.7
用时14分钟50秒:
public int maxArea(int[] height) { int n = height.length; int max_right = height[n-1]; int max_area = 0; for(int j = n-1;j>=1;j--){ if(j==(n-1) || height[j] > max_right){ max_right = height[j]; for (int i = 0; i < j; i++) { max_area = Math.max(max_area, Math.min(height[i], height[j]) * (j - i)); } } } return max_area; }
public int maxArea(int[] height) { int n = height.length; int max_area = 0; int i = 0; int j = n-1; while (i<j){ if(height[i]<height[j]){ max_area = Math.max(max_area, height[i] * (j - i)); i++; }else{ max_area = Math.max(max_area, height[j] * (j - i)); j--; } } return max_area; }
——2020.8.5