LeetCode 11 | 盛水最多的容器
题目
题解
解法一:暴力两层循环,找出最大的盛水量,很显然会超时
class Solution {
public:
int maxArea(vector<int>& height) {
int ans=0;
for(int i=0;i<height.size()-1;++i){
for(int j=i+1;j<height.size();++j){
ans=max(ans,min(height[i],height[j])*(j-i));
}
}
return ans;
}
};
解法二:双指针,left,right代表容器的左右边界,每次小的边界向内移动,记录过程中的最大值。代码也比较简单
class Solution {
public:
int maxArea(vector<int>& height) {
int ans=0;
int left=0,right=height.size()-1;
while(left<=right){
ans=max(min(height[left],height[right])*(right-left),ans);
if(height[left]<height[right])left++;
else right--;
}
return ans;
}
};