11.Container With Most Water (Array; Two-Pointers)
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.
思路:两个指针指向开头和结尾的位置,每次将矮的那侧的指针往中间移动,并且只关心比原来高的情况(因为宽度已经减小了,高度必须增高才可能面积变大)
class Solution { public: int maxArea(vector<int>& height) { int size = height.size(); int left = 0, right = height.size()-1; int maxLeft = 0, maxRight = 0; int ret = 0; while(left < right){ if (height[left] < maxLeft) { left++; continue; } else maxLeft = height[left]; if (height[right] < maxRight) { right--; continue; } else maxRight = height[right]; ret = max(ret, min(height[left], height[right]) * (right - left)); if(height[left] < height[right]) left++; else right--; } return ret; } };