LeetCode 11 Container With Most Water

97 阅读1分钟

LeetCode 11 Container With Most Water

思路

Container的大小由两条边的距离和较短的那条line的长度决定。维护两个变量left和right,分别表示左边的line和右边的line的index。因此,Container的大小为(right - left) * min(height[left], height[right])。从两边向中间遍历,因此(right - left)是逐渐变小的。在这样的条件下,只有min(height[left], height[right])变大,Container才有可能变大。

代码

class Solution {
public:
    int maxArea(vector<int>& height) {
        int rs = 0;
        int i = 0, j = height.size() - 1, h;
        while (i < j) {
            h = min(height[i], height[j]);
            rs = max(rs, h * (j - i));
            while (height[i] <= h && i < j) ++i;
            while (height[j] <= h && i < j) --j;
        }
        
        return rs;
    }
};