题目解析
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;}
};