前言
正文
题目
未看题解时,解题的思路
暴力解法
自己实现的代码
code
class Solution {
public:
int maxArea(vector<int>& h) {
int n = h.size();
int dp[n][n];
int res = 0;
for(int i = 0;i<n;i++)
{
for(int j = i+1;j<n;j++)
{
dp[i][j] = 0;
dp[i][j] = (j-i)*min(h[i],h[j]);
res = max(res,dp[i][j]);
}
}
return res;
}
};
看了题解后解题的思路
使用双指针的方法,将左右边界中较小的值向中间移动,直到两个指针重合。
标准答案的代码
code
class Solution {
public:
int maxArea(vector<int>& h) {
//使用双指针的方法,将左右边界中较小的值向中间移动,直到两个指针重合。
int left = 0;
int right = h.size()-1;
int res = 0;
while(left<right)
{
int n = (right-left)*(min(h[left],h[right]));
res = max(n,res);
if(h[left]>h[right])
right--;
else
left++;
}
return res;
}
};