(LeetCode 面试经典 150 题 ) 11. 盛最多水的容器 (贪心+双指针)
题目:11. 盛最多水的容器
思路:双指针+贪心。时间复杂度0(n)。
先从最边上的两侧开始遍历:l=0,r=n-1
下一个最优解肯定是让高度小的那一侧移动产生的:if(height[l]<height[r]) l++; else r–;
C++版本:
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版本:
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版本:
func maxArea(height []int) int {n:=len(height)l,r:=0,n-1mx:=0for l<r {mx=max(mx,min(height[l],height[r])*(r-l))if height[l]<height[r] {l++}else {r--}}return mx
}