
方法一:
暴力穷举
方法二:
1、双指针法
2、题解视频:https://leetcode-cn.com/problems/container-with-most-water/solution/shuang-zhi-zhen-fa-zheng-ming-jian-dan-yi-dong-bu-/。简单易懂,不需要公式。
疑问 1:它选出的结果一定是面积最大的吗?
比如下面这张图,如果j=8的这个位置,可以发现i=0,j<8围成的柱子都比,i=0,j=8围成的面积小。其实类似穷举过所有i=0柱子的情况了。所以需要将矮柱子i=0移动。抛弃i=0这个柱子

疑问 2:总感觉它没有穷举所有的可能,会漏掉一些,那最大值会不会刚好被漏掉了呢?
没有漏掉情况。因为我们已经抛弃当前的矮柱子了。矮柱子之前已经比较过了。其实也是类似穷举了所有的情况
class Solution {
public:
int maxArea(vector<int>& height) {
if(height.size() == 0) {
return 0;
}
int i = 0;
int j = height.size()-1;
int max_area = 0; // 记录最大的面结
while(i < j) {
// 使用最矮的柱子X长度
max_area = max(max_area, min(height[i], height[j])*(j-i));
// 矮柱子移动
if(height[i] < height[j]) {
++i;
} else {
--j;
}
}
return max_area;
}
};
297

被折叠的 条评论
为什么被折叠?



