11. 盛最多水的容器
給定一個長度為?n
?的整數數組?height
?。有?n
?條垂線,第?i
?條線的兩個端點是?(i, 0)
?和?(i, height[i])
?。
找出其中的兩條線,使得它們與?x
?軸共同構成的容器可以容納最多的水。
返回容器可以儲存的最大水量。
說明:你不能傾斜容器。
今天是2025年3月17日星期一
????????這個只要讀懂了就很好理解,首先定義兩個指針作為邊界,因為裝雨水的話就像木桶效應一樣,關鍵是看短的那一條,能裝下的就是兩個邊界之間的距離乘以兩個邊界中的最小值,接下來就是一個移動指針的思考,因為主要是看短邊,所以移動長邊事沒意義的,因此選擇移動短邊并重新計算對應的雨水,迭代的過程不斷更新ans取最大值,最后當兩個指針相遇時結束。
class Solution {
public:int maxArea(vector<int>& height) {int l = 0,r = height.size()-1;int ans = 0;while(l<r){int area = min(height[l],height[r])*(r-l);ans = max(ans,area);if(height[l]<=height[r]){l++;}else{r--;} }return ans;}
};