题目链接:https://leetcode.com/problems/container-with-most-water/
分析:两指针+短板原理
用两个指针分别指向最左边和最右边,根据短板原理,能够存储最大容量的水其实是由最短的那块短板来决定的,因此当height[l] < height[r]时,++l,短板为height[l]; 否则, --r。
另外:如果想要获得更大的面积,当两指针分别往右和往左移动时候,其实底部的宽度是减小的,也即(j-i)是减少的,为了增大面积,必须height[l],height[r]中较小的指针,才有可能增加高度,否则根据短板原理,面积必然是减小的。
实现代码如下:
class Solution { public: int maxArea(vector<int>& height) { int n = height.size(); int l = 0; int r = n - 1; int ans = 0; while(l < r) { int area = min(height[l], height[r]) * (r - l); ans = ans > area ? ans : area; if(height[l] < height[r]) { ++l; } else { --r; } } return ans; } };