Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) 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.
一开始觉得这和 Large Rectangle in Histogram 是一道题,仔细想下还是有很大的区别。MaxArea = {height[i],height[j]} * (j-1)
Naive 的做法是求出每个 index i 可以构造出的最大 Area,复杂度O(n^2)
O(n) 的做法是用两个指针从头尾向当中扫,指针移动的策略见代码,非常 straightforward。
class Solution {
public:
int maxArea(vector<int> &height) {
// Start typing your C/C++ solution below
// DO NOT write int main() function
if(height.size()==0) return 0;
int i = 0;
int j = height.size()-1;
int maxArea = 0;
while(i<j)
{
if(height[i]<=height[j])
{
maxArea = max(maxArea,(j-i)*height[i]);
i++;
}
else
{
maxArea = max(maxArea,(j-i)*height[j]);
j--;
}
}
return maxArea;
}
};