提交的代码:
class Solution {
public:
int maxArea(vector<int>& height) {
int max=1;
int first=0,last=height.size()-1;
int cmp;
while(first!=last)
{
if(height[first]>height[last])
{
cmp=height[last]*(last-first);
last--;
}
else
{
cmp=height[first]*(last-first);
first++;
}
if(cmp>max)
{
max=cmp;
}
}
if(height.size()==2) return cmp;
return max;
}
};
滑动双指针只需要O(1)的复杂度,走完整个序列即找到最大值。
实现:首先设置两个首尾指针,
面积=较小的边*下标位置的差值
,置max为当前面积最大值1,如果大于当前最大值则更新max的值。
并移动指针,为了获取最大的面积,所以移动较小的边向中间遍历。
最后判断边界条件:当数组只有两个元素时直接输出cmp(包含cmp为0的情况)