手撕代码锻炼 11. 盛最多水的容器
作者:
liweidong
,
2023-03-19 17:31:41
,
所有人可见
,
阅读 40
// 这道题和接雨水有什么区别?
/*
* 双指针,相向而行,j在左,i在右
* 计算面积: area = min(h[i], h[j]) * (i-j)
* 比较短的指针向中间移动
*
*/
#include <iostream>
#include <vector>
using namespace std;
int maxArea(vector<int>& h){
int max_area = 0;
// 双指针,相向而行,j在左,i在右
int j = 0, i = h.size()-1;
while(j<i){
// 计算面积
int area = min(h[i], h[j]) * (i-j);
// 比较短的指针向中间移动
if(h[i]<h[j]) i--;
else j++;
max_area = max(area, max_area);
}
return max_area;
}
int main(){
vector<int> h{1,1};
int max_area = maxArea(h);
cout<<max_area<<endl;
return 0;
}