leetcode练习题七:盛最多水的容器

给定n个非负整数a1,a2,…,an,每个数代表坐标中的一个点(i,ai) 。在坐标内画n条垂直线,垂直线i的两个端点分别为(i,ai) 和 (i, 0)。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。

说明:你不能倾斜容器,且n的值至少为 2。

图片

图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为49。

示例:输入: [1,8,6,2,5,4,8,3,7]
输出: 49

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public int maxArea(int[] height) {
int left = 0;
int maxArea = 0;
int right = height.length - 1;
while (left < right) {
//短板决定高度*左右间距=最大面积
maxArea = Math.max(maxArea, Math.min(height[left], height[right]) * (right - left));
if (height[left] < height[right]) {
left++;
} else {
right--;
}
}
return maxArea;
}
-------------笔者水平有限,若有错漏,欢迎指正!-------------
坚持原创技术分享,您的支持将鼓励我继续创作!