【LeetCode】11. Container With Most Water

Container With Most Water

Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.

Note: You may not slant the container.

 

双指针,思路与Trapping Rain Water类似。

由于间距在不断缩小,因此唯一可能增大容量的办法就是把当前的短板换掉。

采取的做法是,短板指针往中间逼近,争取指向数值大的板。

时间复杂度:O(n)

class Solution {
public:
    int maxArea(vector<int> &height) {
        int result = 0;
        int left = 0;
        int right = height.size()-1;
        int leftWall = height[left];
        int rightWall = height[right];
        while(left < right)
        {
            result = max(result, min(leftWall, rightWall) * (right-left));
            if(leftWall <= rightWall)
            {
                left ++;
                leftWall = height[left];
            }
            else
            {
                right --;
                rightWall = height[right];
            }
        }
        return result;
    }
};

你可能感兴趣的:(LeetCode)