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.
题目大意:给一个数组,每一个数代表x轴上一条线(一块板),求两块板中加上x轴这个容器能够装最多的水。
class Solution(object):
def maxArea(self, height):
"""
:type height: List[int]
:rtype: int
"""
j=len(height)
if j==0:
return 0
maxwater=0
i=0
j=j-1
while(i<j):
maxwater=max(maxwater,(j-i)*min(height[i],height[j]))
if height[i]<=height[j]:
i+=1
else:
j-=1
return maxwater
92ms通过。
詹天佑挖隧道法,首尾出发。哪边小哪边往中间移动,你制约了集体发展所以你要退出历史舞台。如果有比当前情况大的情况肯定出现在小的那边移动之后。因为距离变短想要更多水只能高度变高,只能小的那边移动寻找更高的边。
修改了一下语法后的c++代码:
class Solution {
public:
int maxArea(vector<int>& height) {
int j=height.size();
if (j==0){
return 0;}
int maxwater=0;
int i=0;
j--;
while(i<j){
maxwater=max(maxwater,(j-i)*min(height[i],height[j]));
if (height[i]<=height[j]){
i+=1;
}
else{
j-=1;
}
}
return maxwater;
}
};
24ms通过。