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;

    }

};

 

你可能感兴趣的:(contain)