说明:你不能倾斜容器,且 n 的值至少为 2。
图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。
示例:
输入:[1,8,6,2,5,4,8,3,7]
输出:49
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/container-with-most-water
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法:两个for计算面积然后比较大小O(N^2),双指针,比较,小的移动,O(N)
class Solution {
public:
int maxArea(vector<int>& height) {
//双指针解法
int n = height.size();
int max_area = -1;
int i = 0,j = n-1;
while(i < j){
max_area = max(max_area,min(height[i],height[j]) * (j - i));
if(height[i] < height[j])
++i;
else
--j;
}
return max_area;
}
int maxArea1(vector<int>& height) {
//求最大的公共面积,O(n^2)的解法
int n = height.size();
int max_area = -1;
for(int i = 1;i < n;++i){
for(int j =0;j < i;++j){
max_area = max(max_area,(i-j) * min(height[i],height[j]));
}
}
return max_area;
}
};