LeetCode-11. 盛最多水的容器
思路
非常经典的双指针问题。 根据图形可以看出,最大的面积有两个条件,一是高度一定是高的,左边和右边有距离。 即面积=短的一边高度*两边的距离 所以我们在最左边和最右边设置两个指针。 动态的计算他们此时的面积,并与之前进行比较留下最大值。 而由于是计算最大值,所以当我们确定一边是当前最大面积的值时,为了找到比他更大的值,就需要去移动高度最矮的那边。
根据上述伪代码思想,得.
代码
public int maxArea(int[] height) {
int left=0;
int right=height.length-1;
int sum=0;
while(left<=right){
int h=Math.min(height[left],height[right]);
sum=Math.max(sum,(right-left)*h);
if(height[left]>height[right]){
right--;
}else{
left++;
}
}
return sum;
}
Powered by Waline v2.14.7