首先根据题意可以列出暴力解法,时间复杂度为O(n^2),很明显会超时。
接下来讲解双指针解法:
设两指针i , j ,指向的水槽板高度分别为h[i] , h[j] 。由于可容纳水的高度由两板中的 短板 决定,因此可得面积公式S=min(h[i],h[j])*(j-i).
在每个状态下,无论是长板还是短板向内收一格都会导致X减小1,就会有如下两种情况:
1、短板向内收缩min(h[i],h[j])可能会变大,S可能会增大。
2、长板向内收缩min(h[i],h[j])不变或减小,S一定减小。
因此我们根据单调性,我们每次让短板向内收缩。
Code
class Solution { public: int maxArea(vector<int>& height) { int max_=0,l=0,r=height.size()-1; while (l<r){ int h=min(height[l],height[r]); max_=max(max_,h*(r-l)); if (height[l]<height[r]) l++; else r--; } return max_; } };
标签:长板,容器,min,int,height,最多水,短板 From: https://www.cnblogs.com/purple123/p/18013934