https://leetcode.com/problems/container-with-most-water/
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). n vertical lines are drawn such that the two endpoints of line i is at (i, ai) 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 and n is at least 2.
Subscribe to see which companies asked this question.
題意:給你一個數組,從a1,a2...an,來描述n個點:(1,a1)、(2,a2)、(i,ai)、(n,an),對每個點畫一條線垂直於x軸,任選兩條線作爲玻璃,問往裏面倒水最多能倒多少?
解答:一開始寫了個暴力,結果超時了。後來優化了一下,假設a1爲短板,那麼要使a1爲玻璃,那麼要距離它最遠的比它長的線,找到即可。
class Solution {
public:
int maxArea(vector<int>& height) {
int size = height.size();
int ans = 0;
for(int i=0;i<size;i++)
{
int l=0,r=size-1;
while(height[i]>height[r])
{
r--;
}
while(height[i]>height[l])
{
l++;
}
ans=max(ans,height[i]*(r-i));
ans=max(ans,height[i]*(i-l));
}
return ans;
}
};