题目:
给定一个长度为
n
的整数数组height
。有n
条垂线,第i
条线的两个端点是(i, 0)
和(i, height[i])
。找出其中的两条线,使得它们与
x
轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。
思路:定义两个指针分别指向两块板子s = min(h[i],h[j]) * (j - i) 针对短板:由于min取决于短板长度,所以向内移动短板,min有可能增大,s = min * (j-i-1) 有可能增大 针对长板:由于min取决于短板长度,所以向内移动长板的话,min只会减小或者不变,s = min * (j-i-1) 所以一定减小。 所以只需要一直将两块板子中的短板向内移动,直到相遇,所记录最大值即为水池最大面积
代码:
class Solution {public int maxArea(int[] height) {int max = 0;// s = min(h[i],h[j]) * (j - i)int left = 0;int right = height.length - 1;while (left < right){max = Math.max(max,Math.min(height[left],height[right]) * (right - left);)if (height[left] < height[right]){left++;}else {right--;}}return max;}
}