给定 n 个非负整数 a1, a2,
..., an, 每个数代表了坐标中的一个点 (i,
。画 n 条垂直线,使得 i 垂直线的两个端点分别为
ai)(i,
和
ai)(i, 0)
。找到两条线,使得其与 x 轴共同构成一个容器,以容纳最多水。
样例
给出[1,3,2]
,
最大的储水面积是2
.
注意
容器不可倾斜。
分析:采用两边逼近法,显而易见,当逐渐逼近的时候,容器的长在变短,那么要使得面积增大的话,宽必须要变大,所以我们保留长的那条线段,使得短线段向另一方逐渐逼近。
代码:
class Solution { public: /** * @param heights: a vector of integers * @return: an integer */ int maxArea(vector<int> &heights) { // write your code here int ret = 0; int r = heights.size()-1; int l = 0; while (l < r) { ret = max(ret,min(heights[l],heights[r])*(r-l)); if(heights[l]<heights[r]) l++; else r--; } return ret; } };
时间: 2024-10-11 10:39:49