LeetCode Container With Most Water 区间贪心
You are given an integer array height
of length n
. There are n
vertical lines drawn such that the two endpoints of the ith line are (i, 0)
and (i, height[i])
.
Find two lines that together with the x-axis form a container, such that the container contains the most water.
Return the maximum amount of water a container can store.
Solution
很容易知道答案是 \(\max_{i,j}(|i-j|\times \min(h[i],h[j]))\),如果遍历 \(i,j\),则复杂度为 \(O(n^2)\)。但是可以贪心的去选择 (\(O(n)\)),我们只需要每次移动高度较小的一端:
点击查看代码
class Solution {
private:
int ans = -1;
public:
int maxArea(vector<int>& height) {
int n = height.size();
if(n==2)return min(height[0],height[1]);
int st = 0, ed = n-1;
ans = (ed-st)*min(height[ed], height[st]);
while(st<ed){
if(height[st]<=height[ed]){
st+=1;
}
else ed-=1;
ans = max(ans, (ed-st)*min(height[ed], height[st]));
}
return ans;
}
};