2014-10-20 11:23:39 +08:00
|
|
|
// Source : https://oj.leetcode.com/problems/container-with-most-water/
|
|
|
|
// Author : Hao Chen
|
|
|
|
// Date : 2014-06-22
|
|
|
|
|
2014-10-21 10:49:57 +08:00
|
|
|
/**********************************************************************************
|
|
|
|
*
|
2014-10-21 11:39:53 +08:00
|
|
|
* 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.
|
2014-10-21 10:49:57 +08:00
|
|
|
*
|
|
|
|
* Note: You may not slant the container.
|
|
|
|
*
|
|
|
|
*
|
|
|
|
**********************************************************************************/
|
|
|
|
|
2014-10-20 11:23:39 +08:00
|
|
|
class Solution {
|
|
|
|
public:
|
|
|
|
int maxArea(vector<int> &height) {
|
2014-10-22 17:42:21 +08:00
|
|
|
|
|
|
|
int maxArea = 0;
|
|
|
|
// two pointers scan from two sides to middle
|
|
|
|
int left = 0;
|
|
|
|
int right = height.size()-1;
|
|
|
|
|
|
|
|
int area;
|
|
|
|
while ( left < right ){
|
|
|
|
//calculate the area
|
|
|
|
area = (right - left) * ( height[left] < height[right] ? height[left] : height[right]);
|
|
|
|
//tracking the maxium area
|
|
|
|
maxArea = area > maxArea ? area : maxArea;
|
|
|
|
// because the area is decided by the shorter edge
|
|
|
|
// so we increase the area is to increase the shorter edge
|
|
|
|
height[left] < height[right] ? left++ : right-- ;
|
2014-10-20 11:23:39 +08:00
|
|
|
}
|
|
|
|
|
2014-10-22 17:42:21 +08:00
|
|
|
return maxArea;
|
2014-10-20 11:23:39 +08:00
|
|
|
}
|
|
|
|
};
|