力扣算法篇:盛最多水的容器
盛最多水的容器:
实例:
题解:
双指针法,左右各一个指针left,right,每次将短板指针向内移动1
原因:
(1)若长板向内移动,那么min(height[left],height[right])变小或者不变,而向内移动横轴长度必定变短,所以新围成的面积必定变小
(2)若短板向内移动,那么min(height[left],height[right])变小或者变大,那么新围成的面积有可能变大,
故每次将短板指针向内移动1,计算新围成的面积。
class Solution {
public:
int maxArea(vector<int>& height) {
//盛最多水的容器 即面积最大
//元素个数
int n = height.size();
//双指针法 按规则移动
int left = 0;
int right = n-1;
//面积
int maxArea = -1;
while(left != right){
//当前面积
int currentArea = (right - left)*min(height[left],height[right]);
//判断是否更新面积
if(currentArea>maxArea){
//更新最大面积
maxArea = currentArea;
}
if(height[left]<height[right]){
//左板更短 移动左板
left++;
}else{
//右板更短 移动右板
right--;
}
}
return maxArea;
}
};