【题目描述】
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate(i, ai).n vertical lines are drawn such that the two endpoints of line i is at(i, ai)and(i, 0). Find two lines, which together with x-axis forms a container, such that the container contains the most water.
Notice:You may not slant the container.
给定n个非负整数 a1, a2, ..., an, 每个数代表了坐标中的一个点(i, ai)。画n条垂直线,使得i垂直线的两个端点分别为(i, ai)和(i, 0)。找到两条线,使得其与x轴共同构成一个容器,以容纳最多水。
【注】容器不可倾斜。
【题目链接】
www.lintcode.com/en/problem/container-with-most-water/
【题目解析】
木桶原理大家肯定都知道,水盛多少取决于最短的杯壁,所以此题还可以引申为往围成的区域内放矩形,怎样使得矩形面积最大。题目中的不能倾斜(slant:倾斜,倾倒)对应为矩形必须水平放置。
复杂度为O(n)的思想是贪心原理,先从底边最大的情况考虑,计算最大面积后,此时要将底边长度减1,只需要将杯壁较短的那一边移动一个单位距离,得到的解必定优于杯壁较长那边移动的情况。这样保证每次移动都得到的是局部最优解。
【参考答案】