笨!笨!笨!
int maxArea(vector<int> &height) {
int n=height.size();
int sum=0;
for (int i=1;i<=n;i++)
{
for (int j=i+1;j<=n;j++)
{
if ((j-i)*min(height[i-1],height[j-1])>sum)
{
sum = (j-i)*min(height[i-1],height[j-1]);
}
}
}
return sum;
}上面这个时间限制,下面这个没想出来。
int maxArea(vector<int> &height) {
int n=height.size();
int i=0,j=n-1;
//int left=0,right=n-1;
int sum=min(height[i],height[j])*(j-i);
while(i<j)
{
if (height[i]<height[j])// this is vital that choose the little height.
{
int left=i;
i++;
while (i<j&&height[i]<=height[left])
{
i++;
}
}
else
{
int right=j;
j--;
while (i<j&&height[j]<=height[right])
{
j--;
}
}
if (i<j&&(j-i)*min(height[i],height[j])>sum)
{
sum = (j-i)*min(height[i],height[j]);
}
}
return sum;
}思考不够,这个可以有。反问自己问什么没想出来?从过程的角度出发,确实要每两个都比较一次才能不落下最大值,但是从结果的角度出发就会发现结果是有规律的,假设结果的最大值两侧分别为i,j。那么i左面肯定没有比i的高度大的,同理j右面肯定没有比j的高度大的。如果想到了这里就可以想到可以便利一次就找到i,j。再想想,i,j如何移动?一起移动吗?如果一起移动的话漏掉了什么?先移动谁?为什么?
优化算法:二维数组中最大面积计算

382

被折叠的 条评论
为什么被折叠?



