Leetcode-11:Container With Most Water
About 1 min
Container With Most Water
Description
You are given an integer array height
of length n
. There are n
vertical lines drawn such that the two endpoints of the ith
line are (i, 0)
and (i, height[i])
.
Find two lines that together with the x-axis form a container, such that the container contains the most water.
Return the maximum amount of water a container can store.
Notice that you may not slant the container.
Example 1:

Input: height = [1,8,6,2,5,4,8,3,7]
Output: 49
Explanation: The above vertical lines are represented by array [1,8,6,2,5,4,8,3,7]. In this case, the max area of water (blue section) the container can contain is 49.
Example 2:
Input: height = [1,1]
Output: 1
Constraints:
n == height.length
2 <= n <= 105
0 <= height[i] <= 104
Solution
Violence(Overtime)
public int maxArea(int[] height) {
int final_max = 0;
for(int i = 0; i < height.length; i++) {
int max = 0;
for(int j = 0; j < height.length; j++) {
int min = Math.min(height[i], height[j]);
int gap = Math.abs(i - j);
max = Math.max(max, min*gap);
}
final_max = Math.max(final_max, max);
}
return final_max;
}
Dual_Pointer (Copy)
- If the short plate is moved inward, the short plate min(h[i], h[j]) of the sink may become larger, so the area of the next sink may increase.
- If the long plate is moved inward, the short plate min(h[i], h[j]) of the sink will remain unchanged or become smaller, so the area of the next sink must become smaller.
class Solution {
public int maxArea(int[] height) {
int i = 0, j = height.length - 1, res = 0;
while(i < j) {
res = height[i] < height[j] ?
Math.max(res, (j - i) * height[i++]):
Math.max(res, (j - i) * height[j--]);
}
return res;
}
}
// 作者:Krahets
// 链接:https://leetcode.cn/problems/container-with-most-water/solutions/11491/container-with-most-water-shuang-zhi-zhen-fa-yi-do/
