见证了第十题的逆天难度,我们马上来一道轻松一些的力扣第十一题,这道题我的解法耗时比较多,如果各位大神们有更优质时间复杂度的解法,可以在评论区留言,感谢!
关卡十一:盛最多水的容器
题目:给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i,0)和(i,height[i])找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以存储的最大水量。
解题思路
public class Solution {
public int MaxArea(int[] height) {
}
}
这道题想必大家看一眼就知道就最少都能想起一种解法了吧!反正我看了一眼,这两条红色的竖线,心中想用双指针的想法油然而生。但是我们都知道双指针法并不是一种最优解,在使用双指针法的同时,势必要做循环,一旦有循环,时间复杂度就上去了。这里我讲一下双指针法:首先,初始代码给了一个数组,我们设置两个指针去找左右相对最大的height就行了,然后使用数学面积公式,求得面积的最大值就行了。
代码演示
public class Solution {
public int MaxArea(int[] height) {
if(height == null || height.Length <= 1){
return 0;
}
int left = 0;
int right = height.Length - 1;
int maxArea = 0;
while(left < right)
{
int area = Math.Min(height[left],height[right]) * (right - left);
maxArea = Math.Max(maxArea,area);
if(height[left]<height[right])
{
left++;
}
else
{
right--;
}
}
return maxArea;
}
}
问题反思
时间复杂度高了,如果大神们有更好的解法可以@我,小编在这里向贡献思路的各位大神献上感谢!