11.Container With Most Water (Array; Two-Pointers)

Given n non-negative integers a1a2, ..., an, where each represents a point at coordinate (iai). n vertical lines are drawn such that the two endpoints of line i is at (iai) 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;
    }
};

 

posted on 2015-07-20 20:30  joannae  阅读(137)  评论(0编辑  收藏  举报

导航