其他分享
首页 > 其他分享> > 水箱容积问题

水箱容积问题

作者:互联网

问题:

给定一个长度为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