水箱容积问题
作者:互联网
问题:
给定一个长度为n的整形数组,元素均大于0;以其中任意两个作为隔板,且位置不变;如何使水的容积最大?设计算法,说明时间、空间复杂度。
代码:
int water(int a[], int n)
{
int m = 0, tmp; // m 存储最大值,作为最后的结果
int i = 0, j = n - 1; // 左右边界
while (i < j)
{
if (a[i] < a[j])
tmp = a[i] * (j - i++);
else
tmp = a[j] * (j-- - i);
if (tmp > m) // 更新最大值
m = tmp;
}
return m;
}
这个方法的原理可以参见我的另一篇博客:https://www.cnblogs.com/fanlumaster/p/13756144.html
时间复杂度
循环大致需要进行 (n - 1) 次,所以时间复杂度为 O(N).
空间复杂度
O(1),只需要额外的常数级别的空间。
标签:tmp,容积,int,复杂度,水箱,问题,空间,最大值 来源: https://www.cnblogs.com/fanlumaster/p/13756545.html