题目
给定 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0)。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
思路
双指针算法
本题,左<右,舍弃左,因为右可能会制造出更大的面积。
解答
执行用时 :28 ms, 在所有 C++ 提交中击败了42.47%的用户
内存消耗 :9.9 MB, 在所有 C++ 提交中击败了58.55%的用户
class Solution {
public:
int maxArea(vector<int>& height) {
int left=0;
int right=height.size()-1;
int water=0;
int result=0;
int temp=0;
while(left<right){
if(height[left]<=height[right]){
temp=height[left];
}else{
temp=height[right];
}
water=temp*(right-left);
if(water>=result){
result=water;
}
if(height[left]<=height[right]){
left++;
}else{
right--;
}
}
return result;
}
};
Tips:关于双指针
算法入门:双指针法:https://blog.csdn.net/qq_29475553/article/details/52468499
算法总结--数组相关】双指针法的常见应用:https://blog.csdn.net/ohmygirl/article/details/7850068
算法中的双指针思想及常见应用:https://blog.csdn.net/qq_43699339/article/details/88376494