一、题目
二、解题
难度 | 时间复杂度 | 空间复杂度 |
---|---|---|
中等 | O(n) | O(1) |
思路:双指针夹逼法
1 某两条线之间区域之间的面积会受到线的高度、距离影响,我们放两个指针分别在开始、末尾。
2 计算两条线之间区域面积,每次计算并存储,比较之前存储的最大区域面积,较大则替换。
3 每次比较后,较短线者向中间移。
/// <summary>
/// 双指针夹逼法
/// </summary>
/// <remarks>
/// 1 某两条线之间区域之间的面积会受到线的高度、距离影响,我们放两个指针分别在开始、末尾。
/// 2 计算两条线之间区域面积,每次计算并存储,比较之前存储的最大区域面积,较大则替换。
/// 3 每次比较后,较短线者向中间移。
/// </remarks>
public int MaxArea(int[] height)
{
int max = 0;
int left = 0;
int right = height.Length - 1;
while (left < right)
{
max = Math.Max(max,
(right - left) * Math.Min(height[left], height[right]));
if (height[left] > height[right])
right--;
else
left++;
}
return max;
}