贪心+双指针
常规思路:
从左向右两层遍历,找到每一个以外层循环中的点i为起点,内层循环中的点j为终点的容器面积,如果比ans大则更新ans的值,需要O(n2)
贪心:
容器的面积取决于宽和高,我们让宽尽量宽。
双指针:
从两侧向中间遍历,每次移动,宽都会-1,这时容器的最大值由于木桶效应,取决于较短边,计算出此时的面积,如果更大则更新ans
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param height int整型vector
* @return int整型
*/
int maxArea(vector<int>& height) {
// write code here
int n = height.size();
if(n < 2)
return 0;
int ans = 0;
int l = 0;
int r = n - 1;
while( l < r ){
int index = height[l] <= height[r] ? l : r;
ans = max(ans,height[index] * (r-l));
if(index == l)
l++;
else
r--;
}
return ans;
}
};

京公网安备 11010502036488号