算法分析与设计第七周

这里写图片描述

分析:最简单的是暴力法,即列举所以可能的组合,此法要嵌套扫两遍,所以复杂度为o(n^2).
然而此题可以用o(n)的复杂度解决,原因在于水桶原理,即关注短板。可以从两端开始,从短的一遍向内重选边,因为可能找到一个更长的边来抵消x轴减小带来的影响,并使高度与x轴乘机变大。重复上述步骤,直到两边重合。因此复杂度为o(n)。
代码:

class Solution {
public:
    int maxArea(vector<int>& height) {

        int first = 0, second = height.size() - 1, maxA = 0;
        int high;

        while (first < second)
        {
            high = min(height[first], height[second]);
            maxA = max(maxA, high * (second - first));

            while (height[first] <= high && first < second) ++first;

            while (height[second] <= high && first < second) --second;
        }

        return maxA;
    }
};

测试通过:

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值