using System;
public class Solution
{
int Area = 0;
public int MaxArea(int[] height)
{
/*
* @lc app=leetcode.cn id=11 lang=csharp
*
* [11] 盛最多水的容器
最简单的思路是列出所有的可能性,时间复杂度是o(n^2)
2.先选定最长的宽为准,依次往内收敛,保留相对较高的高
另一个较矮的舍弃,保留相对最大值
*/
/*for(int i = 0;i < height.Length-1; i++){
for(int j = 1 ; j< height.Length; j++){
int minHeght = height[i]<height[j]?height[i]:height[j];
int maxArea = (j-i)*minHeght;
Area = Area < maxArea?maxArea:Area;
}
}
return Area;*/
//两个指针,i指向最左,j指向最右,比较两个对应的h,
//小的收敛++/--
/*
int i = 0;
int j = height.Length-1;
int area = (j - i)*(height[i] < height[j]?height[i]:height[j]);
while(i < j){
if(height[i] < height[j]){
i++;
}
else{
j--;
}
int maxArea = (j - i)*(height[i] < height[j]?height[i]:height[j]);
area = area > maxArea?area:maxArea;
}*/
int area = 0;
//此时不用计算最边界的值,因为下面的循环已经有了边界值
//(height.Length)*System.Math.Min(height[0],height[height.Length-1]);
for (int i = 0, j = height.Length - 1; i < j;)
{
//if(i < j){
//此时height先取的i的值,之后i才自加
int minHeight = height[i] < height[j] ? height[i++] : height[j--];
//上面的自加以后,i或者j已经发生了变化,所以要+1
int max = (j - i + 1) * minHeight;
area = System.Math.Max(area, max);
//}
}
return area;
}
}
leetcode-11.盛水最多
最新推荐文章于 2023-08-05 16:08:16 发布