題目:
解決方案:雙指針
指針 i 指向最左側,指針 j 指向最右側。此時在寬度上達到了最大值,那么哪個柱子更矮,哪個柱子向內部移動,知道 i 與 j 相遇。為什么呢?
- 如果哪個哪個柱子更矮,哪個柱子向內部移動:短板長度可能會減小、增大、不變(面積可能增大或不變或減小)
- 如果哪個哪個柱子更高,哪個柱子向內部移動:短板長度不變或減小(面積一定減小)
代碼如下:
C++
class Solution {
public:int maxArea(vector<int>& height) {int i=0,j=height.size()-1;int s=j*min(height[i],height[j]);while(i<j){if(height[i]<height[j]){i++;}else{j--;}int s_temp=(j-i)*min(height[i],height[j]);s=max(s,s_temp);}return s;}
};
python:
class Solution:def maxArea(self, height: List[int]) -> int:i=0j=len(height)-1s=j*min(height[i],height[j])while i<j:if height[i]<height[j]:i+=1else:j-=1s_temp=(j-i)*min(height[i],height[j])s=max(s,s_temp)return s