标签:贪心;双指针
问题:给定一个长度为 n
的整数数组 height
。有 n
条垂线,第 i
条线的两个端点是 (i, 0)
和 (i, height[i])
。找出其中的两条线,使得它们与 x
轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。【height.length >= 2】
思路:
最后的容器是由左板子和右板子组成的,贪心在于使这两个板子尽量长并且板子间距离尽量大
设置左板子指针left,右板子指针right
1.为满足贪心板子间距离尽量大,左右板子分别从最左边和最右边开始挑选
2.为满足贪心板子长度尽量长,哪个板子拖后腿就换板子,实现处下面代码标注了
public int maxArea(int[] height) {
int maxArea=0;
int left=0;
int right=height.length-1;
while(right>left){
int size=Math.min(height[right],height[left])*(right-left);
if(size>maxArea)
maxArea=size;
// 看谁拖后腿了,就换板子
if(height[right]>height[left])
left++;
else
right--;
}
return maxArea;
}
标签:容器,right,int,height,leetcode11,最多水,板子,maxArea,left
From: https://blog.csdn.net/m0_64995001/article/details/143492255