首页 > 代码库 > 【Leetcode】Container With Most Water

【Leetcode】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.

思路:可以从最外侧开始考虑,第1层以及第n层所形成的容器当做最初始的容器。每个容器的面积,取决于最短的的木板以及宽度,要想减少宽度之后,能够得到更大的容量,必须保证木板的长度增大了。采用贪心策略可以解决。

class Solution {
public:
    int maxArea(vector<int> &height) {
        int width = height.size();
        if(width <= 1)  return 0;
        
        int start = 0;
        int end = width - 1;
        int result = INT_MIN;
        
        while(start < end)
        {
            int tempArea = min(height[start], height[end]) * (end - start);
            result = max(result, tempArea);
            if(height[start] <= height[end])
                start++;
            else
                end--;
        }
        
        return result;
    }
};