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.
水桶裝水求容積,實際上是求各條線組成的長方形的面積。
保存左右兩個指針,每次計算出當前長方形的面積(高是短的那條線,寬是兩個指針的距離),然后與當前最大值進行比較,如果大于當前最大值就替換掉;然后比較兩個指針指向的值,移動值小的指針,即移動決定高的。
可以理解為最開始就把寬設為最大,然后不斷縮小寬,增長高。
class Solution {
public:
int maxArea(vector<int>& height) {
if(height.size()<=1) return 0;
int left=0;
int right = height.size()-1;
int max_area = 0;
while(left<right) {
max_area = max(max_area,
min(height[left],height[right])*(right-left));
if(height[left]>=height[right]) {
right--;
} else {
left++;
}
}
return max_area;
}
};