本题的暴力法不难,难的是 O(n) 的方法。
移动的策略是每次向内移动较短的那一端,为什么呢,因为如果向内移动长的那一端面积一定减少,但是移动短的那一端存在面积变大的可能性。
关键的关键就是向内移动长的那端面积一定见少,这样思路就明确了。
class Solution { public int maxArea(int[] height) { int l=0; int r=height.length-1; int result = 0; while(l<r){ result = Math.max(result, Math.min(height[l], height[r]) * (r - l)); if(height[l]<height[r]){ l++; }else{ r--; } } return result; } }
class Solution: def maxArea(self, height: List[int]) -> int: i=0 j=len(height) - 1 result = 0 while i<j: result = max(result, min(height[i], height[j])*(j-i)) if height[i]<height[j]: i+=1 else: j-=1 return result
原文:https://www.cnblogs.com/huangzengrui/p/12347357.html