题目:11. 盛最多水的容器
思路:双指针+贪心。时间复杂度0(n)。
先从最边上的两侧开始遍历:l=0,r=n-1
下一个最优解肯定是让高度小的那一侧移动产生的:if(height[l]<height[r]) l++; else r--;
C++版本:
cpp
class Solution {
public:
int maxArea(vector<int>& height) {
int n=height.size();
int l=0,r=n-1;
int mx=0;
while(l<r){
mx=max(mx,min(height[l],height[r])*(r-l));
if(height[l]<height[r]) l++;
else r--;
}
return mx;
}
};
JAVA版本:
java
class Solution {
public int maxArea(int[] height) {
int n=height.length;
int l=0,r=n-1;
int mx=0;
while(l<r){
mx=Math.max(mx,Math.min(height[l],height[r])*(r-l));
if(height[l]<height[r]) l++;
else r--;
}
return mx;
}
}
GO版本:
go
func maxArea(height []int) int {
n:=len(height)
l,r:=0,n-1
mx:=0
for l<r {
mx=max(mx,min(height[l],height[r])*(r-l))
if height[l]<height[r] {
l++
}else {
r--
}
}
return mx
}