题目解析
11. 盛水最多的容器
木桶效应,寻找一个区间使得这个区间的体积最大
算法讲解
1. 暴力枚举
遍历这个容器,将每一个区间的体积求出来,然后找出最大的
class Solution
{
public:
int maxArea(vector<int>& height)
{
int n = height.size();
int ret = 0;
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
ret = max(ret, min(height[i], height[j]) * (j - i));
}
}
return ret;
}
};
//但是时间复杂去已经是O(n*n),Leetcode超时
2. 双指针
先确定最大长度的宽,计算并判断当前的体积已经左右指针的大小,以此来移动指针
class Solution {
public:
int maxArea(vector<int>& nums) {
int left = 0, right = nums.size() - 1;
int ret = 0;
while(left < right)
{
int v = min(nums[left], nums[right]) * (right - left);
ret = max(ret, v);
if(nums[left] < nums[right]) left++;
else right--;
}
return ret;
}
};