11 Container With Most Water

1. Question

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 andnis at least 2.

2. Implementation

(1) Two Pointers
1
class Solution {
2
public int maxArea(int[] height) {
3
int res = 0;
4
int start = 0, end = height.length - 1, curHeight = Integer.MAX_VALUE;
5
6
while (start < end) {
7
curHeight = Math.min(height[start], height[end]);
8
res = Math.max(res, curHeight * (end - start));
9
10
if (height[start] <= curHeight) {
11
++start;
12
}
13
else {
14
--end;
15
}
16
}
17
return res;
18
}
19
}
Copied!

3. Time & Space Complexity

时间复杂度O(n), 空间复杂度O(1)