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))。