leecode第十一题(盛最多水的容器)

class Solution {
public:
    int maxArea(vector<int>& height) {
        
        int len=height.size();//错过,少了int
        if (len<2)
            return 0;
        if (len==2)
            return min(height[0],height[1]);
        
        int i=0,j=len-1;
        int max_vol=0,cur_vol=0;
        while (i!=j)
        {
            cur_vol=(min(height[i],height[j]))*(j-i);//错过,因为j-i不用+1,这里该举例具体分析一下的
            if(height[i]<=height[j])
                i++;
            else 
                j--;
            if(cur_vol>max_vol)
                max_vol=cur_vol;
        }
        
        return max_vol;//错过,拼写错误
        
    }
};

 

分析:

一开始想到双循环遍历,但是时间复杂度为O(n^2),后来想到双指针法,在距离尽可能大的情况,由于受边最小值影响,使值小指针往中间靠,这样时间复杂度O(n),也没有增加空间复杂度(都是O(1))。

posted @ 2019-03-22 11:09  深夜十二点三十三  阅读(143)  评论(0)    收藏  举报