解题思路
看到这个题,一开始打算用动态规划求解,看到数据范围就觉得要超出时间限制,果然超出。
寻求线性时间算法
双指针求解:
- 原理很简单,left和right指针分别指向两边,不断往中间缩进,记录最优结果即可。
代码
class Solution {
public:
int maxArea(vector<int>& height) {
int n = height.size();
int ans = 0;
//两个指针指向两边
int left = 0,right = n - 1;
while(left < right) {
//能装多少水的公式
int water = (right - left) * min(height[left],height[right]);
//保存最优结果
ans = max(water,ans);
//移动指针
if(height[left] < height[right])left++;
else right--;
}
return ans;
}
};
//双指针解题