这里是题目描述:LeetCode-11.盛最多水的容器双指针
双指针+贪心解法
一个容器的容量的计算方法是:组成容器的条垂直线中较短一条线的长度*两条垂直线的距离
。那么如何确定组成容量最大的容器的两条垂直线。假设给定垂线数组height
长度为n
,我们使用两个指针left
、right
分别指向组成容器的两条垂直线,初始值left=0
,right=n-1
,即分别指向最左端和最右端;此时两垂直线间的距离最大,我们若要移动left
或right
以寻找更大的容量,left
只能向右移动,right
只能向左移动,两直线间的距离肯定变短,为了寻找更大的容量,需要增加垂直线的长度,即移动较短的垂直线的距离;并在移动的过程中更新容量的最大值,即在减小宽度的过程中,尝试寻找更大的高度
题解代码:
class Solution {
public int maxArea(int[] height) {
int area=0;
int left=0,right=height.length-1;
while(left<right)
{
area=Math.max(area,Math.min(height[left],height[right])*(right-left));
if(height[left]<height[right]) //尝试将left右移
{
left+=1;
}
else //尝试将right左移
{
right-=1;
}
}
return area;
}
}
时间复杂度:O(n)
空间复杂度:O(1)