方法一:最笨的方法 遍历 会超时
class Solution {
public:
int maxArea(vector<int>& height) {
if(height.size() == 0 || height.size() == 1)
{
return 0;
}
else if(height.size() == 2)
{
return pow(min(height[0],height[1]),2);
}
else
{
int max = 0;
int len = height.size();
for(int index = 0; index < len-1; index++)
{
for(int j = index+1; j<= len-1; j++)
{
long area = 0;
area = (j-index)*min(height[index],height[j]);
max = (area > max)? area:max;
}
}
return max;
}
}
};
方法二:借鉴别人的方法,采用双指针的方法,从数组的两端一起开始,设定max = 0
假设i表示数组的左端 j表示数组的右端, 如果height[i] < height[j]
i ++ 否则 j--。依次计算area。
class Solution {
public:
int maxArea(vector<int>& height) {
int left = 0;
int right = height.size()-1;
int max = 0;
while(left < right)
{
if(height[left] < height[right])
{
int area = (right - left)* height[left];
max = (area > max)? area : max;
left ++;
}
else
{
int area1 = (right - left)* height[right];
max = (area1 > max)? area1 : max;
right--;
}
}
return max;
}
};

本文介绍了两种计算矩形最大面积的方法。第一种方法是遍历数组,虽然直观但效率低下,可能导致超时。第二种方法采用双指针技术,从数组两端同时开始,根据高度较小的元素移动指针,显著提高了计算速度。这种方法展示了在解决算法问题时如何通过优化策略提升效率。
527

被折叠的 条评论
为什么被折叠?



