p11

LeetCode p11 Container With Most Water 题解

1.题目:

Given n non-negative integers a1, a2, …, an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) and (i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.
Note: You may not slant the container.

题意:

给你一个数组代表从左到右木板的高度。
问 从中选两个木板出来,在他们现有的位置上可以装多少水。

2.解题思路:

注意:从i j 上选了木板可以储水的宽度j-i;
思路如下:先选取最宽的边长 头和尾。
如我们所知最大的体积及最大的高度和宽度的乘积。
高度为两个木板中的最短木板。
所以我们每次推进的木板应该是短的那个木板。
因为如果推进长的那个木板,留下短的那个木板,是无获得更大的数的。
也就是没有意义的。
所以此题的策略为,从头尾开始,每次选取最短的木板向内推进。

3.代码


[title] [] [url] [link text]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
public class Solution {
public int maxArea(int[] height) {
int ans = 0;
int i = 0;
int j = height.length - 1;
while (i < j) {
ans = Math.max(ans, Math.min(height[i], height[j]) * (j - i));
if (height[j] < height[i])
j--;
else {
i++;
}
}
return ans;
}
}

4.一些总结: