def max_area(height):
l,r=0,len(height)-1; best=0
while l<r:
best=max(best,min(height[l],height[r])*(r-l))
if height[l]<height[r]: l+=1
else: r-=1
return best
public int maxArea(int[] height){
int l=0,r=height.length-1,best=0;
while(l<r){
best=Math.max(best,Math.min(height[l],height[r])*(r-l));
if(height[l]<height[r]) l++;
else r--;
} return best;
}
Greedy: always move shorter side. max/min vs Math.max/min.
def max_area(height):
l,r=0,len(height)-1; best=0
while l<r:
best=max(best,min(height[l],height[r])*(r-l))
if height[l]<height[r]: l+=1
else: r-=1
return best
public int maxArea(int[] height){
int l=0,r=height.length-1,best=0;
while(l<r){
best=Math.max(best,Math.min(height[l],height[r])*(r-l));
if(height[l]<height[r]) l++;
else r--;
} return best;
}
1. Calculate area 2. Move shorter inward 3. Track max