算法分析与设计第七周

来源:互联网 发布:ipad qq游戏 网络异常 编辑:程序博客网 时间:2024/06/05 08:04

这里写图片描述

分析:最简单的是暴力法,即列举所以可能的组合,此法要嵌套扫两遍,所以复杂度为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;    }};

测试通过:

这里写图片描述

原创粉丝点击