BRUTE FORCE暴力破解方法如下:
class Solution {
public:
int maxArea(vector<int>& height) {
//BRUTE FORCE
int res = 0;
int size = height.size();
for(int i = 0;i<size;i++)
{
for(int j=i+1;j<size;j++)
{
res = max(res,(j - i) * min(height[i],height[j]));
}
}
return res;
}
};
不出意料的Time Limit Exceeded……
其实当我看到这里,脑子里忽然想起了非常经典的双指针问题,尝试实现O(N)的解法验证是否可行。两个指针从两端计算可以装水面积,移动的时候高度低的一方向高度较高的一方移动。
class Solution {
public:
int maxArea(vector<int>& height) {
//O(N)
int left = 0,right = height.size() - 1,res = 0;
while(left < right)
{
int area = (right -left) * min(height[left],height[right]);
res = max(res,area);
if(height[left] < height[right])
left++;
else
right--;
}
return res;
}
};